码迷,mamicode.com
首页 > 其他好文 > 详细

requests--传递参数

时间:2019-10-10 11:21:21      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:encoding   用法   type   obj   requests   post   call   amp   github   

传递参数 

传递URL参数
data = {city: 北京}
# 参数有中文如果发送不了,必须要编码
city = parse.urlencode(data).encode(utf-8)

一般在GET请求中使用查询字符串(query string)来进行参数传递,在requests库中使用如下方法:

import requests

base_url = http://httpbin.org
# 将参数存在字典里
params_data = {"user": "zou", "pwd": 31500}

r = requests.get(base_url + /get, params=params_data)
print(r.url)  # 打印URL
print(r.status_code)

结果

http://httpbin.org/get?user=zou&pwd=31500
200
传递body参数

在post请求里有两个参数,data为form表单格式的,json为Content-Type是json格式的。返回的值如果是json格式的,可以用r.json(),r.text不管是json格式还是html格式的都可以

在POST请求中,一般参数都在请求体中传递,在requests中用法如下:

import requests

base_url = http://httpbin.org
# 将参数存在字典里
form_data = {"user": "zou", "pwd": 31500}

r = requests.post(base_url + /post, data=form_data)
print(r.url)  # 打印URL
print(r.status_code)
print(r.text)  # 打印出响应文本

结果:

http://httpbin.org/post
200
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "pwd": "31500", 
    "user": "zou"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "18", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.4"
  }, 
  "json": null, 
  "origin": "112.10.81.210, 112.10.81.210", 
  "url": "https://httpbin.org/post"
}

data和json的区别

如果我们发送post请求时,里面有个参数json,还有个参数时data,它们都是提交的服务器的数据,那它们有什么区别呢?

data与json既可以是str,也可以是dict

区别如下:

不管json是str还是dict,如果不指定headers中的content-type,默认为application/json


data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式,此时数据可以从request.POST里面获取,而request.body的内容则为a=1&b=2的这种形式,注意,即使指定content-type=application/json,request.body的值也是类似于a=1&b=2,所以并不能用json.loads(request.body.decode())得到想要的值

data为str时,如果不指定content-type,默认为application/json

原始响应内容

可以找出 Requests 使用了什么编码,并且能够使用r.encoding 属性来改变它:

r.encoding  # 获取编码格式
utf-8

r.encoding = ISO-8859-1 # 设置编码格式

在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做:

>>> r = requests.get(https://api.github.com/events, stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10) \x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03

如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过Response.raise_for_status() 来抛出异常:

>>> bad_r = requests.get(http://httpbin.org/status/404)
>>> bad_r.status_code
404

>>> bad_r.raise_for_status()
Traceback (most recent call last):
  File "requests/models.py", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error

 

requests--传递参数

标签:encoding   用法   type   obj   requests   post   call   amp   github   

原文地址:https://www.cnblogs.com/zouzou-busy/p/11406703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!