首页 > 编程知识 正文

python请求头整理,python随机请求头

时间:2023-12-27 22:28:03 阅读:327209 作者:RNXB

本文目录一览:

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()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。