本文目录一览:
- 1、Python的 request 库,请求头是什么?
- 2、Python爬虫杂记 - POST之multipart/form-data请求
- 3、python requests get方式怎么设置请求头?
- 4、Python爬虫之Header
- 5、python得到客户端的请求头
- 6、如何用Python写一个http post请求
Python的 request 库,请求头是什么?
就是headers,照抄浏览器F12里那一堆就行,如下图,请求标头下面所有内容都是。
Python爬虫杂记 - POST之multipart/form-data请求
原以为requests请求十分强大, 但遇到了模拟multipart/form-data类型的post请求, 才发现requests库还是有一丢丢的不足。 不过也可能是我理解的不足, 还希望读者老爷不吝指教! 在此感谢!
enctype属性:
enctype:规定了form表单在发送到服务器时候编码方式,它有如下的三个值。
①application/x-www-form-urlencoded:默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。
②multipart/form-data:指定传输数据为二进制类型,比如图片、mp3、文件。
③text/plain:纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。
值得注意的是:请求头的Content-Type属性与其他post请求的不同
总注:上边这两种构建参数的方式各有不同, 用起来感觉并不是那么的灵活,所以感叹requests有那么一丢丢丢的不足。值的注意的是,requests.post中files参数接收字典的形式和encode_multipart_formdata中params参数接收字典形式的区别!人生苦短......
python requests get方式怎么设置请求头?
Header可以通过Request提供的.add_header()方法进行添加,示例代码如下:
123456789101112# -*- coding:utf-8 -*-
import urllib2import urlliburl = ''half_url = u'/servlet/av/jd?
ai=782ji=2624743sn=I'#构造get请求req = urllib2.
Request(url+half_url.
encode('utf-8'))#添加headerreq.add_header('AcceptEncoding', 'gzip,deflate')req.
add_header('User-Agent','Mozilla/5.0')response = urllib2.
urlopen(req)
print response.
Requests支持流式上传,这允许你发送大的数据流或文件而无需先把它们读入内存。要使用流式上传,仅需为你的请求体提供一个类文件对象即可。
读取文件请使用字节的方式,这样Requests会生成正确的Content-Length。
with open('massive-body', 'rb') as f:
requests.post('', data=f)
分块传输编码
对于出去和进来的请求,Requests也支持分块传输编码。要发送一个块编码的请求,仅需为你的请求体提供一个生成器
注意生成器输出应该为bytes
def gen():
yield b'hi'
yield b'there'
requests.post('', data=gen())
For chunked encoded responses, it's best to iterate over the data
using Response.iter_content(). In an ideal situation you'll have set stream=True on the
request, in which case you can iterate chunk-by-chunk by calling iter_content with a chunk
size parameter of None. If you want to set a maximum size of the chunk, you can set a chunk
size parameter to any integer.
Python爬虫之Header
HTTP “请求头信息” Request Header 是向服务端提供客户端的信息,“响应头信息” Response Header 是服务端向客户端提供请求文档信息或服务器的状态信息,服务端判断服务端的身份,就是通过 Header 来判断的,所以爬虫通过设置 Header 来隐藏自己相当重要。
一个完整的HTTP请求包含以下部分:
请求方法 URL HTTP版本
请求头信息
请求数据
一个空行,请求的结束行
常见的请求头:
Accept :客户端接收的数据类型,如:Accept:text/html
User Agent :客户端软件类型
Authorization :认证消息,包括用户名和口令
Referer :用户获取的Web页面
真实的请求头信息会更多,下面是豆瓣某短评的真实请求头:
一个完整的HTTP响应包含以下部分:
状态行
响应头
响应数据
常见的状态行:
更多状态码查看: HTTP状态码
常见的响应头:
Server :Web服务器程序的信息
Date :当前服务器的日期和时间
Last Modified :请求文档最近一次修改的时间
Expires :请求文档过期时间
Content-length :数据长度(字节)
Content-type :数据MIME类型
WWW-authenticate :用于通知客户方需要的认证信息,如用户名,口令等
下面是豆瓣某短评的真实响应头:
Python使用Requests来请求的时候,如果没有设置Header,Header是空的,设置Header的方法如下:
python得到客户端的请求头
http-server能提供的环境变量是有限的,一般是基于标准的cgi接口实现,这样就难免会去除一些不常用到的信息。如果想获取完整头信息只能自己实现,或者是使用python实现的http-server。如webpy中就可以通过web.ctx.env访问header信息。
webpy项目中:
class index:
def GET(self):
for k in web.ctx.env:
print k, web.ctx.env[k]
运行结果:
D:\python code.py
HTTP_COOKIE webpy_session_id=33d6e36b5ba97b4b8047508d38aac8b045dc09d2
SERVER_SOFTWARE CherryPy/3.2.0 Server
SCRIPT_NAME
ACTUAL_SERVER_PROTOCOL HTTP/1.1
REQUEST_METHOD GET
PATH_INFO /
SERVER_PROTOCOL HTTP/1.1
QUERY_STRING
HTTP_USER_AGENT Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gec
ko) Chrome/35.0.1916.114 Safari/537.36
HTTP_CONNECTION keep-alive
REMOTE_PORT 1842
SERVER_NAME localhost
REMOTE_ADDR 127.0.0.1
wsgi.url_scheme http
SERVER_PORT 8080
wsgi.input web.wsgiserver.KnownLengthRFile object at 0x013D8E10
HTTP_HOST localhost:8080
wsgi.multithread True
HTTP_CACHE_CONTROL max-age=0
REQUEST_URI /
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*
;q=0.8
wsgi.version (1, 0)
wsgi.run_once False
wsgi.errors open file 'stderr', mode 'w' at 0x00BA60D0
wsgi.multiprocess False
HTTP_ACCEPT_LANGUAGE zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ja;q=0.2
HTTP_ACCEPT_ENCODING gzip,deflate,sdch
127.0.0.1:1842 - - [28/May/2014 15:13:29] "HTTP/1.1 GET /" - 200 OK
如何用Python写一个http post请求
可以参考如下三种方法:
一、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()