導航:首頁 > 編程語言 > 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報文相關的資料

熱點內容
阿里雲伺服器終端在哪裡 瀏覽:144
app紙有什麼用 瀏覽:219
cuteftp命令 瀏覽:502
最開始的編程語言是什麼 瀏覽:757
at遠程命令 瀏覽:490
雲伺服器哪家好點 瀏覽:211
android系統源碼閱讀 瀏覽:926
dumpjava分析工具 瀏覽:678
怎麼下載cpu源碼 瀏覽:154
代碼加密怎麼取消 瀏覽:888
編譯原理代碼在哪裡運行 瀏覽:584
解密攝影pdf 瀏覽:72
演算法編程中級題目 瀏覽:250
c語言編譯器畢業設計 瀏覽:717
醫保卡申請app哪個好 瀏覽:945
阿里雲伺服器上傳源碼 瀏覽:602
營銷管理科特勒pdf 瀏覽:696
願望清單app哪個好 瀏覽:461
安卓外放聲音怎麼解決 瀏覽:196
脈脈app干什麼用的 瀏覽:362