导航:首页 > 编程语言 > python构造http报文

python构造http报文

发布时间:2022-08-25 16:12:38

python怎么做服务器伪装HTTP协议

HTTP协议是很简单的一个协议,没必要伪装的。而且python有很多web框架。其中比较小巧的一个是web.py ,其网址是http://webpy.org/ 复杂的框架也很多,比如很流行的django之类的。下面的httplib实际上是模拟客户端的。

② python 怎么实现http服务器

简而言之,它是在物理服务器上搭建的一个网络连接服务器(networking server),永久地等待客户端发送请求。当服务器收到请求之后,它会生成响应并将 其返回至客户端。客户端与服务器之间的通信,是以HTTP协议进行的。客户端可以是浏览器,也可以是任何支持HTTP协议的软件。
那么,网络服务器的简单实现形式会是怎样的呢?下面是我对此的理解。示例代码使用Python语言实现,不过即使你不懂Python语言,你应该也可以从代码和下面的 解释中理解相关的概念:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

import socket

HOST, PORT = '', 8888

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print 'Serving HTTP on port %s ...' % POR

③ 如何用Python写一个http post请求

#coding=utf-8

importurllib2
importurllib

url="http://www..com/login"

#构造请求参数
params={"username":"xxx","password":"xxxxx"}
data=urllib.urlencode(params)
#构造请求头
headers={"User-Agent":"Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.1;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;MediaCenterPC6.0;.NET4.0C;.NET4.0E"}

req=urllib2.Request(url,data,headers)
response=urllib2.urlopen(req)
printresponse.read()

④ 如何用Python写一个http post请求

http.client包就实现了相应操作的,具体你可以看python的官方教程,下面是我从里面截取的POST示例:

>>>importhttp.client,urllib.parse
>>>params=urllib.parse.urlencode({'@number':12524,'@type':'issue','@action':'show'})
>>>headers={"Content-type":"application/x-www-form-urlencoded",
..."Accept":"text/plain"}
>>>conn=http.client.HTTPConnection("bugs.python.org")
>>>conn.request("POST","",params,headers)
>>>response=conn.getresponse()
>>>print(response.status,response.reason)
302Found
>>>data=response.read()
>>>data
b'Redirectingto<ahref="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
>>>conn.close()

⑤ 如何用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请求

"""我只是意思意思一下写了点代码 不完整 但是大概意思应该体现出来了 一些参数是模拟sina weibo登陆的 我有空就去贴出全部代码 以前也写过个分享了 然后sina改了加密算法 我就又写了一个”“”
session = requests.Session()
url_prelogin = "xxxxx"

resp = session.get(url_prelogin)
json_data = re.search('\((.*)\)', resp.content).group(1)
data = json.loads(json_data)
servertime = data['servertime']
nonce = data['nonce']
pubkey = data['pubkey']
rsakv = data['rsakv']

postdata = {
'entry': 'weibo',
'gateway': '1',
'from': '',
'savestate': '7',
'userticket': '1',
'ssosimplelogin': '1',
'vsnf': '1',
'vsnval': '',
'su': su,
'service': 'miniblog',
'servertime': servertime,
'nonce': nonce,
'pwencode': 'rsa2',
'sp': sp,
'encoding': 'UTF-8',
'url': ' xxxxx',
'returntype': 'META',
'rsakv' : rsakv,
}

resp = session.post(url_login,data=postdata)
print resp.content

⑦ 如何用Python写一个http post请求

谢谢上面各位:下面是我自己按照自己的需求写的,贴出来作个参考:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import
httplib
import json
conn =
httplib.HTTPConnection("localhost:8080")
headers =
{"Content-type":"application/json"} #application/x-www-form-urlencoded
params
=
({"bindHyCardInfo":{"mobileNo":"1881026xxxx","userId":"2","cardno":"7926279367963021","cardpasswd":"xxxxxxxxxxxxxxx","ip":"127.0.0.1"},"header":{"version":"1.0.1","from":"1000","to":"2000","tid":"7926279367963021","time":"12312","token":"SEW342WEER2342","ext":""}})
conn.request("POST",
"/core-oper/rest/bindCard", json.JSONEncoder().encode(params),
headers)
response = conn.getresponse()
data = response.read()
if
response.status == 200:
print 'success'
print data
else:
print
'fail'
conn.close()

转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

⑧ 如何用Python写一个http post请求

python发送post和get请求
get请求:
使用get方式时,请求数据直接放在url中。
方法一、
importurllib
importurllib2
url="http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa"
req=urllib2.Request(url)
printreq
res_data=urllib2.urlopen(req)
res=res_data.read()
printres
方法二、
importhttplib
url="http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa"
conn=httplib.HTTPConnection("192.168.81.16")
conn.request(method="GET",url=url)
response=conn.getresponse()
res=response.read()
printres
post请求:
使用post方式时,数据放在data或者body中,不能放在url中,放在url中将被忽略。
方法一、
importurllib
importurllib2
test_data={'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode=urllib.urlencode(test_data)
requrl="http://192.168.81.16/cgi-bin/python_test/test.py"
req=urllib2.Request(url=requrl,data=test_data_urlencode)
printreq
res_data=urllib2.urlopen(req)
res=res_data.read()
printres

方法二、
importurllib
importhttplib
test_data={'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode=urllib.urlencode(test_data)
requrl="http://192.168.81.16/cgi-bin/python_test/test.py"
headerdata={"Host":"192.168.81.16"}
conn=httplib.HTTPConnection("192.168.81.16")
conn.request(method="POST",url=requrl,body=test_data_urlencode,headers=headerdata)
response=conn.getresponse()
res=response.read()
printres

⑨ 如何用Python写一个http post请求

用这个:class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])

其中data就是post的内容。
从别的地方找了个例子一看就能懂。

import urllib
import urllib2
url = 'http://umbra.nascom.nasa.gov/cgi-bin/eit-catalog.cgi'
values = {'obs_year':'2011','obs_month':'March',
'obs_day':'8','start_year':'2011'
,'start_month':'March','start_day':'8'
,'start_hour':'All Hours','stop_year':'2011'
,'stop_month':'March','stop_day':'8'
,'stop_hour':'All Hours','xsize':'All'
,'ysize':'All','wave':'all'
,'filter':'all','object':'all'
,'xbin':'all','ybin':'all'
,'highc':'all'}
data = urllib.urlencode(values)
print data
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
print the_page

阅读全文

与python构造http报文相关的资料

热点内容
脉脉app干什么用的 浏览:357
拽姐是哪个app 浏览:858
云服务器删除了还有吗 浏览:232
macbook可以用单片机嘛 浏览:307
南阳php招聘 浏览:814
去哪里找按摩师很漂亮的app 浏览:818
86x99用简便算法计算 浏览:830
php截图flash 浏览:273
卸载联想app哪个好 浏览:719
php文字转图片 浏览:331
豆客后台怎么加密码 浏览:574
jpg转换pdf破解版 浏览:978
php基础书籍推荐 浏览:778
服务器与外网不通如何验证 浏览:351
电子版是不是就是文件夹 浏览:51
游戏属性文件加密 浏览:464
如何让安卓手机桌面图标下移 浏览:530
ubuntuphp5环境搭建 浏览:101
赌瘾解压视频 浏览:919
晋城移动dns服务器地址 浏览:296