精华内容
下载资源
问答
  • python实现get请求

    2020-08-07 11:46:22
    python——get请求 import urllib.request url = "http://www.csdn.net" response = urllib.request.urlopen(url) # 打印请求的状态码 print(response.getcode()) msg = response.read() # 打印请求的网页内容的...

    python——get请求

    import urllib.request
    
    url = "http://www.csdn.net"
    
    response = urllib.request.urlopen(url)
    # 打印请求的状态码
    print(response.getcode())
    msg = response.read()
    # 打印请求的网页内容的长度
    print(len(msg))
    

    输出:

    200
    1148023
    
    Process finished with exit code 0
    
    展开全文
  • python实现http get请求

    千次阅读 2020-08-13 16:28:43
    接口请求方式为get请求,如下图抓包查看 Python实现脚本请求接口并以中文打印接口返回的数据 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939 寻找有志同道合的小伙伴,互帮互助,群里还有不错...

    接口请求方式为get请求,如下图抓包查看
    在这里插入图片描述

    Python实现脚本请求接口并以中文打印接口返回的数据

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    import urllib.parse
    import urllib.request
    
    url = "https://..../manage/region/list"
    
    # 定义请求数据,并且对数据进行赋值
    values={}
    values['status']= 'hq'
    values['token']= 'C6AD7DAA24BAA29AE14465DDC0E48ED9'
    
    # 对请求数据进行编码
    data = urllib.parse.urlencode(values).encode('utf-8')
    print(type(data))   # 打印<class 'bytes'>
    print(data)         # 打印b'status=hq&token=C6AD7DAA24BAA29AE14465DDC0E48ED9'
    
    # 若为post请求以下方式会报错TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
    # Post的数据必须是bytes或者iterable of bytes,不能是str,如果是str需要进行encode()编码
    data = urllib.parse.urlencode(values)
    print(type(data))   # 打印<class 'str'>
    print(data)         # 打印status=hq&token=C6AD7DAA24BAA29AE14465DDC0E48ED9
    
    # 将数据与url进行拼接
    req = url + '?' + data
    # 打开请求,获取对象
    response = urllib.request.urlopen(req)
    print(type(response))  # 打印<class 'http.client.HTTPResponse'>
    # 打印Http状态码
    print(response.status) # 打印200
    # 读取服务器返回的数据,对HTTPResponse类型数据进行读取操作
    the_page = response.read()
    # 中文编码格式打印数据
    print(the_page.decode("unicode_escape"))
    

    执行脚本,接口返回数据
    在这里插入图片描述
    使用到的函数

    urllib.parse.urlencode() 把key-value这样的键值对转换成a=1&b=2这样的字符串
    
    urllib.request.urlopen() 打开指定的url,就是进行get请求
    
    response.read() 读取HTTPResponse类型数据
    

    脚本执行过程报错记录,requests爬虫时开启代理会报以下错误

    requests.exceptions.SSLError: HTTPSConnectionPool(host='api.****.cn', port=443):Max retries exceeded with url: //manage/region/list (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
    
    展开全文
  • python实现接口请求

    2020-07-02 12:55:51
    我们想用 python实现get请求,requests是Python发送接口请求非常好用的一个三方库。但是requests发送请求是串行的,需要发送完一条请求后才能发送另一条请求。 安装方法: pip install requests 下面的示例是我用 ...

    python+request串行

    我们想用 python实现接口请求,requests是非常好用的一个三方库。但是requests发送请求是串行的,需要发送完一条请求后才能发送另一条请求。
    安装方法: pip install requests
    下面的示例用 requests.get()方法实现串行请求100条数据,参数a,b,c。b和c固定,把100条参数a放在excle中,通过pandas读excle。
    Requests 允许使用 params 关键字参数,以一个字符串字典来提供这些参数。

    > import pandas as pd 
    > import requests 
    > 
    > #你的接口请求地址
    > g_request_url = "你的请求地址"
    > 
    > #串行请求 
    > def do_request(request_url,send_data):
    >     response = requests.get(request_url,params=send_data)
    >     return response 
    >     
    > if __name__ == '__main__':
    >     data = pd.read_excel('D:/a_test.xlsx', sheet_name='Sheet1', header=0)
    >     # pandas读excle是Dataform,我们将Dataform转list
    >     excel_list = data.values.tolist()
    >     error = 0
    >     total = 0
    >     for data1 in excel_list:
    >         a = data1[0]
    >         payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
    >         #发送请求
    >         result=do_request(g_request_url,payload)
    >         code = result.status_code
    >         if(code != 200):           
    >             error = error + 1
    >         total = total + 1
    >     print("total"+str(total))
    >     print("error"+str(error))
    

    运行后,我们发现100条请求串行请求时间太长,为了提升测试效率,一般我们需要并行发送请求。这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦。
    那有什么实现起来简单的方法吗?当然有!

    python+grequests并行

    grequests是基于gevent+requests编写的一个并发发送请求的库,我们直接使用起来非常简单。
    安装方法: pip install grequests
    grequests支持get、post、put、delete等requests支持的HTTP请求方法,使用参数和requests一致,发送请求非常简单。
    通过遍历res_list可以得到所有请求的返回结果。

    import grequests as grequests
    import pandas as pd
    
    g_request_url = "你的请求地址"
    
    #并行请求 
    def do_grequest(request_url,send_data):
        response = grequests.get(request_url,params=send_data)
        #print(response.text,a)
        return response 
    if __name__ == '__main__':
        data = pd.read_excel('D:/a_test.xlsx', sheet_name='Sheet1', header=0)
        # pandas读excle是Dataform,我们将Dataform转list
        excel_list = data.values.tolist()
        # print(excel_list)
        #构造请求列表
        url_list = []
        for data1 in excel_list:
            a = data1[0]
            payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
            result=do_grequest(g_request_url,payload)
            url_list.append(result)
            #print(url_list)
        # 并行发送,等最后一个运行完后返回
        res_list = grequests.map(url_list)
        #print(res_list)
        for i in res_list:
            code = i.status_code
            if (code != 200):
               error = error + 1
            else:
                total = total + 1
        print("total" + str(total))
        print("error" + str(error))
    

    requests和grequests性能对比

    以上串行和并行请求代码执行后,明细发现串行花费的时间要比并行请求长,我们可以对比下requests串行和grequests并行请求的时间。
    requests请求:

    import pandas as pd
    import requests
    import time
    
    #你的接口请求地址
    g_request_url = "你的请求地址"
    #串行请求 
    def do_request(request_url,send_data):
        response = requests.get(request_url,params=send_data)
        return response
    
    if __name__ == '__main__':
        data = pd.read_excel('D:/a_test.xlsx', sheet_name = 'Sheet3', header = 0)
        # Dataform转list
        excel_list = data.values.tolist()
        start = time.time()
        for data1 in excel_list:
            a = data1[0]
            payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
            result = do_request(g_request_url,payload)
        print(time.time() - start) 
    

    串行请求1000条数据,耗时:245.24240112304688s
    串行请求100条耗时
    grequests请求:

    import grequests as grequests
    import pandas as pd
    import time
    
    g_request_url = "你的请求地址"
    
    #并行请求
    def do_grequest(request_url,send_data):
        response = grequests.get(request_url,params=send_data)
        return response
    if __name__ == '__main__':
        data = pd.read_excel('D:/ios_1000.xlsx', sheet_name='Sheet3', header=0)
        # Dataform转list
        excel_list = data.values.tolist()
        #构造请求列表
        url_list = []
        start = time.time()
        for data1 in excel_list:
            a = data1[0]
            payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
            result=do_grequest(g_request_url,payload)
            url_list.append(result)
        res_list = grequests.map(url_list)
        print(time.time() - start)
    

    并行请求1000条数据,耗时:14.888465404510498s
    并行请求1000条耗时

    展开全文
  • Python实现HTTP GET请求

    千次阅读 2017-01-14 10:42:15
    TCP socket 在互联网上,我们可以让某台计算机作为...在Python中,我们使用标准库中的socket包来进行底层的socket编程。 首先是服务器端,我们使用bind()方法来赋予socket以固定的地址和端口,并使用listen()方法来被

    TCP socket

    在互联网上,我们可以让某台计算机作为服务器。服务器开放自己的端口,被动等待其他计算机连接。当其他计算机作为客户,主动使用socket连接到服务器的时候,服务器就开始为客户提供服务。

    在Python中,我们使用标准库中的socket包来进行底层的socket编程。

    首先是服务器端,我们使用bind()方法来赋予socket以固定的地址和端口,并使用listen()方法来被动的监听该端口。当有客户尝试用connect()方法连接的时候,服务器使用accept()接受连接,从而建立一个连接的socket:

    # Written by Windy
    # Server side
    import socket
    
    # Address
    HOST = ''
    PORT = 8000
    
    reply = 'Yes'
    
    # Configure socket
    s      = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    
    # passively wait, 3: maximum number of connections in the queue
    s.listen(3)
    # accept and establish connection
    conn, addr = s.accept()
    # receive message
    request    = conn.recv(1024)
    
    
    print 'request is: ',request
    print 'Connected by', addr
    # send message
    conn.sendall(reply)
    # close connection
    conn.close()

    socket.socket()创建一个socket对象,并说明socket使用的是IPv4(AF_INET,IP version 4)和TCP协议(SOCK_STREAM)。

    然后用另一台电脑作为客户,我们主动使用connect()方法来搜索服务器端的IP地址(在Linux中,你可以用$ifconfig来查询自己的IP地址)和端口,以便客户可以找到服务器,并建立连接:

    # Written by Windy
    # Client side
    import socket
    
    # Address
    HOST = '172.20.202.155'
    PORT = 8000
    
    request = 'can you hear me?'
    
    # configure socket
    s       = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    
    # send message
    s.sendall(request)
    # receive message
    reply   = s.recv(1024)
    print 'reply is: ',reply
    # close connection
    s.close()

    现在,我们写出一个HTTP服务器端:

    #coding=utf-8
    #Python HTTP服务器端
    '''
    自己编写一个HTTP服务器端使用socket
    '''
    #Written by Winy
    import socket
    import datetime
    #Address
    HOST=''
    PORT=8882
    # Prepare HTTP response
    today = datetime.datetime.now()
    text_content = '''HTTP/1.x 200 OK  
    Content-Type: text/html
    
    <head>
    <title>WOW</title>
    </head>
    <html>
    <p>Wow, Python Server</p>'''+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") +'''
    <p>Wow, Python Server</p>
    <IMG src="test.jpg"/>
    </html>
    '''
    # Read picture, put into HTTP format
    f = open('test.jpg','rb')
    pic_content = '''
    HTTP/1.x 200 OK  
    Content-Type: image/jpg
    
    '''
    pic_content = pic_content + f.read()
    f.close()
    # Configure socket
    s    = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    # infinite loop, server forever
    while True:
        # 3: maximum number of requests waiting
        s.listen(3)
        conn, addr = s.accept()
        request    = conn.recv(1024)
        print request
        method = request.split(' ')[0]
        src =request.split(' ')[1]
    
        # deal with GET method
        if method == 'GET':
            # ULR    
            if src == '/test.jpg':
                content = pic_content
            else: content = text_content
    
            print 'Connected by', addr
            print 'Request is:', request
            conn.sendall(content)
        # close connection
        conn.close()
    

    使用浏览器实验
    为了配合上面的服务器程序,我已经在放置Python程序的文件夹里,保存了一个test.jpg图片文件。我们在终端运行上面的Python程序,作为服务器端,再打开一个浏览器作为客户端。(如果有时间,你也完全可以用Python写一个客户端。原理与上面的TCP socket的客户端程序相类似。)

    在浏览器的地址栏输入:

    127.0.0.1:8882

    文章参考地址

    展开全文
  • 1.查看本机python版本:python --version 2.查看是否安装pip:pip -V 3.安装pip:sudo easy_install pip 4.安装requests:pip install requests ...5.发送get请求 import requests myaddress_url=...
  • 使用request模块可以快速实现get请求,代码如下: import requests #请求地址 url = "https://api.mycompany.com/tracker/api/project/dependencies" #发送get请求 r = requests.get(url) #获取返回的json数据...
  • GET请求实例:  #coding:utf-8 import requests parm={"userId":"YIN","password":"123"}#封装登录参数 r=requests.get("http://space.test.com/zhzlApp/user/login",params=parm)#发送get请求 c= r.json...
  • 本系列教程我们将使用python实现一些简单的测试工具,为了尽可能的简单,我们的工具以命令行工具为主。 本系列教程使用的python版本是3.6.3。 背景 这一节我们实现简单的命令行发送get请求的工具,使用方式如下: ...
  • python 使用requests 实现 post 和get请求

    千次阅读 2016-11-14 16:07:06
    python 使用requests 实现 post 和get请求
  • 因工作需要在docker中用python获取es统计一些top数据,之前写过用了各种依赖库的,但是在docker中因种种原因不能安装,所以写了一个python实现curl来获取es数据的脚本,希望能帮到大家。 # -*- coding: utf-8 -*- ...
  • python开发(http://www.maiziedu.com/course/python-px/)中,我们一般通过get、post方式发送http请求,可是最近在使用python做接口测试,发现python中http请求方法有许多种,作者整理了一番,把python中http请求...
  • 先将json转成数据名称(name)和数据值(value)之间以等号相连,与另一组name/...def get_url_format(params): if not isinstance(params,dict): raise Exception("params必须是字典!") params = "?"+"&...
  • #coding:UTF-8#socket.getaddrinfo(host, port, family=0, socktype=0, proto=0, flags=0) #根据给定的参数host/port,相应的转换成一个包含用于创建socket对象的五元组, #参数host为域名,以字符串形式给出代表一...
  • 主要介绍了python爬虫 基于requests模块的get请求实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • #!/usr/bin/env python #-*- coding:utf-8 -*- import requests #get请求 resuts=requests.get('http://120.27.23.105/ad/getAd') json=resuts.json() print json code=json['code'] print code
  • get_argument ( "name" ) self . write ( "<p>Hello {}!</p>" . format ( name ) ) def main ( ) : app = tornado . web . Application ( [ ( r "/" , MainHandler ) , ( r "/test" , ...
  • python2.7版本,通过urllib2发出请求一般有get、post方式发出请求 一、urlopen方式 get方式: response = urllib2.urlopen("http://www.baidu.com/") post方式: # 先定义data数据: ...
  • Python requests实现HTTP请求

    千次阅读 2017-06-10 12:23:29
    Python requests实现HTTP请求 By HelloWeb 2017-06-10 Python3本身的urllib也可以实现HTTP请求,不过requests这个库的功能...为配合Python实现HTTP请求,需要访问Web应用,这个Web应用可以是任意的一个Web网站或Web
  • 这篇文章主要介绍了python爬虫 基于requests模块的get请求实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求:爬取搜狗首页的页面数据 import ...
  • 一、get请求 curl "http://www.baidu.com" #如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地curl -i "http://www.baidu.com" #显示全部信息curl -l "... #只显示头部信息curl -...
  • 主要介绍了python爬虫 基于requests模块发起ajax的get请求实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 我们知道通常浏览器支持get与post两种常见的请求方式,那么在python当中如何具体实现呢? GET 首先是get,我们知道get指令比较简单,通常便是在浏览器窗口地址栏中使用?xx=xxxxx 那么在python当中如何实现这个过程呢...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 933
精华内容 373
关键字:

python实现get请求

python 订阅