① 如何用python写一个http post请求
HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。常见的四种编码方式如下:
1、application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):
POST HTTP/1.1 Content-Type:
application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
2、multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值,下面是示例
POST HTTP/1.1
Content-Type:multipart/form-data; boundary=----
------
Content-Disposition: form-data; name="text"
title
------
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
--------
3、application/json
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
4、text/xml
它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。
那么Python在调用外部http请求时,post请求怎么传请求体呢?说实话楼主只实践过【1、application/x-www-form-urlencoded】【2、multipart/form-data 】和【3、application/json】
一、application/x-www-form-urlencoded
import urllib
url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
body_value = urllib.urlencode(body_value)
request = urllib2.Request(url, body_value)
request.add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
二、multipart/form-data
需要利用python的poster模块,安装poster:pip install poster
代码:
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
register_openers()
datagen, re_headers = multipart_encode(body_value)
request = urllib2.Request(url, datagen, re_headers)
# 如果有请求头数据,则添加请求头
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
二、application/json
import json
url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
register_openers()
body_value = json.JSONEncoder().encode(body_value)
request = urllib2.Request(url, body_value)
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
② 如何用Python写一个http post请求
你运气真好,我这刚好有现成的,下面大写的常量就是一些字符串,涉及我们自己的协议,就不发你了,你随便写个就行
defRequestCenter(data,url,web="127.0.0.1",port=9228):
headDic={}
headDic[REQUEST_HEAD_LENGTH]=len(data)
tempList=[]
tempList.append(headDic)
tempList.extend(data)
#远程访问
count=0
jsonData=json.mps(tempList)
headers={"Content-type":"application/json"}
state=-1
whilecount<1:
com=httplib.HTTPConnection(web,port,True)
com.request("POST",url,jsonData,headers)
response=com.getresponse()
time.sleep(0.5)
infoList=[]
state=response.status
if200<=state<300:
infoList=json.loads(response.read())
com.close()
break
else:
count+=1
com.close()
returninfoList
③ 如何用python获得跨域请求的json数据
首先找到获取所需信息的请求,之后查看请求地址和请求参数,使用同样的请求发送数据,如果能得到就OK,得不到的话,可以看一下浏览器的请求代码,火狐和Chrome都可以查看,然后把这些请求头加到代码中,就可以查到了,如果得到的是乱码,有可能被压缩了,解压一下就好,一般为gzip类型压缩,请求头Accept-Encoding:gzip是这样的。
④ 如何用Python3.5写一个http post请求表单传参是json格式的
用requests库
importrequests
data={}#表单为json格式,自定义
requests.post(url,data=data)
⑤ Python爬虫(七)数据处理方法之JSON
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式,且具有自我描述性,更易理解。
JSON看起来像python类型(列表,字典)的字符串。
在之前的文章中,我们说到了怎么用response的方法,获取到网页正确解码后的字符串。如果还有不懂的,可以先阅读 Python爬虫(三)Requests库 。接下来以有道翻译为例子,说说怎么通过网页解码后的字符串,提取到翻译结果。
再结合上述有道翻译的例子,得到字典类型的返回结果,并提取出来翻译结果。
将上述例子的dict_json换成str字符串,再写入文本中。
执行完上述的程序,会得到一个fanyi.txt的文件,其结果如下:{"type": "ZH_CN2EN", "errorCode": 0, "elapsedTime": 1, "translateResult": [[{"src": "\u4eba\u751f\u82e6\u77ed\uff0c\u6211\u7528python", "tgt": "Life is too short, I use python"}]]}。这样子的一份文档,中文部分显示的是二进制,且格式非常不利于阅读,这并不是我们想要的结果。好在json.mps()为我们提供的两个方法,以帮助我们更好阅读文档。
1.ensure_ascii,能够让中文显示成中文;
2.indent,能够让下一行在第一行的基础上空格。
其用法如下:
⑥ 【Python】浅谈python中的json
一 前言
最近一直在做开发相关的工作--基于Django的web 平台,其中需要从model层传输数据到view 层做数据展示或者做业务逻辑处理。我们采用通用的Json格式--Json(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和程序解析。
二 认识Json
2.1 Json 结构
常见的Json格式为 “名称/值”对的集合,其中 值可以是对象,列表,字典,字符串等等。比如
backup_data = {"back_to_host": "dbbk0",
"ip_address": "10.10.20.3",
"host_name": "rac4",
"port": 3306}
2.2 使用Json
Python的Json模块序列化与反序列化的过程分别是 编码和解码。这两个过程涉及到两组不同的函数
编码 把一个Python对象编码转换成Json字符串,json.mps(data)/json.mp(data,file_handler)
解码 把Json格式字符串解码转换成Python对象,json.loads(data)/json.load(file_handler)
在python中要使用Json模块做相关操作,必须先导入:
import Json
2.3 主要函数
编码函数主要有 json.mps(data)/json.mp(data,file_handler)
json.mps()的参数是将python对象转换为字符串,如使用json.mps序列化的对象json_mps=json.mps({'a':1, 'b':2}) ,json_mps='{"b": 2, "a": 1}'
json.mp 是将内置类型序列化为json对象后写入文件。
解码函数主要由json.loads(data)/json.load(file_handler)
json.loads的参数是内存对象,把Json格式字符串解码转换成Python对象,json_loads=json.loads(d_json) #{ b": 2, "a": 1},使用load重新反序列化为dict
json.load()的参数针对文件句柄,比如本地有一个文件/tmp/test.json json_load=json.load(open('/tmp/test.json'))
具体案例参考如下:
In [3]: data={"back_to_host": "rac1",
...: "ip_address": "10.215.20.3",
...: "host_name": "rac3",
...: "port": 3306}
In [7]: json_str=json.mps(data)
In [8]: print json_str
{"ip_address": "10.215.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}
In [9]: json_loads=json.load(json_str)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-9-180506f16431> in <mole>()
----> 1 json_loads=json.load(json_str)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc in load(fp, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
284
285 ""
注意 从上面的报错信息来看 json.loads 传参是字符串类型,并不是文件句柄,没有 read()属性。
In [10]: json_loads=json.loads(json_str)
In [11]: print json_loads
{u'back_to_host': u'rac1', u'ip_address': u'10.215.20.3', u'host_name': u'rac3', u'port': 3306}
In [12]: type(json_loads)
Out[12]: dict
In [13]: type(json_str)
Out[13]: str
利用mp 将数据写入 mp.json
In [17]: with open('/tmp/mp.json','w') as f:
...: json.mp(json_str,f)
...:
yangyiDBA:~ yangyi$ cat /tmp/mp.json
"{\"ip_address\": \"10.10.20.3\", \"back_to_host\": \"rac1\", \"host_name\": \"rac3\", \"port\": 3306}"
yangyiDBA:~ yangyi$
利用json.load 将mp.sjon的数据读出来并赋值给 data
In [18]: with open('/tmp/mp.json','r') as f:
...: data=json.load(f)
...:
In [19]: print data
{"ip_address": "10.10.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}
三 小结
本文算是一篇学习笔记,主要对比了json.loads/json.load , json.mps/ json.mp 的使用差异 ,方便以后更好的使用json 。
以上为本次分享内容,感谢观看。
⑦ 如何用python获得跨域请求的json数据
首先找到获取所需信息的请求,之后查看请求地址和请求参数,使用同样的请求发送数据,如果能得到就OK,得不到的话,可以看一下浏览器的请求代码,火狐和Chrome都可以查看,然后把这些请求头加到代码中,就可以查到了
如果得到的是乱码,有可能被压缩了,解压一下就好,一般为gzip类型压缩,请求头Accept-Encoding:gzip是这样的。
⑧ python怎么获取需要登陆的接口的数据
使用Python做爬虫是很广泛的应用场景,那就涉及到了Python是如何获取接口数据的呢?Python拥有很多很强大的类库,使用urllib即可轻松获取接口返回的数据。
...展开
工具原料Python开发工具url接口,用于请求获取数据
方法/步骤分步阅读
1
/4
首先新建一个py文件,导入所需的类库,urllib,json等。
2
/4
声明api的url地址,和构造请求头。
3
/4
使用urlopen方法发起请求并获取返回的数据。
4
/4
最后就是对返回字符串的处理了。比如字符串的截取,字符串的转换成json对象,转换成字段,再获取对应key的值。
使用Python3实现HTTP get方法。使用聚合数据的应用编程接口,你可以调用小发猫AI写作API。这是一个免费的应用程序接口,先上代码,详细说明写在后面:
1
2
3
4
5
6
7
8
9
10
11
12
import requests
import time
import re
se = requests.session()
if __name__ == '__main__':
Post_url = "http://api-ok.xiaofamao.com/api.php?json=0&v=1&key=xxxxxx" #自己想办法弄到key
Post_data = {
'wenzhang': '床前明月光,疑是地上霜。'
}
Text = se.post(Post_url, data=Post_data).text.replace("'", '"').replace('/ ', '/')
print(Text)
首先,什么是原料药?应用编程接口的全称也称为应用编程接口。它简称为应用编程接口。当我第一次接触接口调用时,我不知道写什么,因为我看了整个项目。这个项目是由龙卷风写的。看了半天龙卷风后,我发现我走错了方向。我只是直接看着界面,因为没有人告诉我项目的整个过程。我不得不强迫自己去看它。我所要做的就是找到程序的主入口,然后根据函数一步一步地调用它。
当我编写接口时,因为我必须配合后台编写和浏览器访问,每次访问只需要传入相应的参数来调用相应的接口。界面可以由他人编写,也可以由合作公司提供。当然,合作公司提供的不是免费的。现在基本上,如果我不访问它一次,它只收费几美分。当你听到这些,不要低估这几分。有时候如果你打了几百万次电话,会花很多钱。有些人认为,我们不能按月付款吗?对不起,我不知道。总之,我们一个接一个地计算,因为第一次,我认为我买的那些直接买了我们想要的所有数据,把它们保存在本地数据库中,当我使用它们时,直接从我自己的数据库中转移它们。后来,我发现我想得太多了,伪原创API。
该接口调用由python的请求库访问,它基本上是一个get或post请求。有些接口是加密的,然后我们必须用另一方提供给我们的公钥加密或解密,然后用相应的参数访问。我们想要的数据基本上是在请求后返回的结果中以json格式解析的。因此,在请求之后,我们可以用请求提供的json函数来解析它,然后提取数据以一次访问一个数据。
没错,接口调用就是这么简单,但是有了后台编写,我才发现请求库现在有多强大,只要它是http或https,我很高兴我在一周内读完了请求和bs4,我真的不打电话给爬虫工程师,如果我是爬虫的时候不学习请求,你能用scrapy写4=dead来写它吗?Urllib的单词基本上被删除了。如果你有要求,为什么要用这个?
⑨ python 想获取请求中的json串 但是一直卡住,无法获取返回。
可以使用fiddler抓包。网络教程,主要看inspector部分,webform就是参数设置,webreview就是响应结果