python接受http請求
❶ python通過get,post方式發送http請求和接收http響應
本文實例講述了python通過get,post方式發送http請求和接收http響應的方法。姿敏分享給輪敏大家供大家參考。
具體如下:
測試用CGI,名字為test.py,放在apache的cgi-bin目錄下:
#!/usr/bin/python
import cgi
def main():
print Content-type: text/htmln
form = cgi.FieldStorage()
if form.has_key(ServiceCode) and form[ServiceCode].value != :
print h1 Hello,form[ServiceCode].value,/h1
else:
print h1 Error! Please enter first name./h1
main()
python發送post和get請求
get請求:
使用get方式時,請求數據直接放在url中。
方法一、
?
7
8
import urllib
import urllib2
url =
req = urllib2.Request(url)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res
方法二、
?
7
import httplib
url =
conn = httplib.HTTPConnection(192.168.81.16)
conn.request(method=GET,url=url)
response = conn.getresponse()
res= response.read()
print res
post請求:臘冊枝
使用post方式時,數據放在data或者body中,不能放在url中,放在url中將被忽略。
方法一、
import urllib
import urllib2
test_data = {ServiceCode:aaaa,b:bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
req = urllib2.Request(url = requrl,data =test_data_urlencode)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res
方法二、
11
import urllib
import httplib
test_data = {ServiceCode:aaaa,b:bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
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()
print res
對python中json的使用不清楚,所以臨時使用了urllib.urlencode(test_data)方法;
模塊urllib,urllib2,httplib的區別
httplib實現了http和https的客戶端協議,但是在python中,模塊urllib和urllib2對httplib進行了更上層的封裝。
介紹下例子中用到的函數:
1、HTTPConnection函數
httplib.HTTPConnection(host[,port[,stict[,timeout]]])
這個是構造函數,表示一次與伺服器之間的交互,即請求/響應
host 標識伺服器主機(伺服器IP或域名)
port 默認值是80
strict 模式是False,表示無法解析伺服器返回的狀態行時,是否拋出BadStatusLine異常
例如:
conn = httplib.HTTPConnection(192.168.81.16,80) 與伺服器建立鏈接。
2、HTTPConnection.request(method,url[,body[,header]])函數
這個是向伺服器發送請求
method 請求的方式,一般是post或者get,
例如:
method=POST或method=Get
url 請求的資源,請求的資源(頁面或者CGI,我們這里是CGI)
例如:
url=
或者
url=
body 需要提交到伺服器的數據,可以用json,也可以用上面的格式,json需要調用json模塊
headers 請求的http頭headerdata = {Host:192.168.81.16}
例如:
?
test_data = {ServiceCode:aaaa,b:bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
headerdata = {Host:192.168.81.16}
conn = httplib.HTTPConnection(192.168.81.16,80)
conn.request(method=POST,url=requrl,body=test_data_urlencode,headers = headerdata)
conn在使用完畢後,應該關閉,conn.close()
3、HTTPConnection.getresponse()函數
這個是獲取http響應,返回的對象是HTTPResponse的實例。
4、HTTPResponse介紹:
HTTPResponse的屬性如下:
read([amt]) 獲取響應消息體,amt表示從響應流中讀取指定位元組的數據,沒有指定時,將全部數據讀出;
getheader(name[,default]) 獲得響應的header,name是表示頭域名,在沒有頭域名的時候,default用來指定返回值
getheaders() 以列表的形式獲得header
例如:
?
1
2
3
4
5
date=response.getheader(date);
print date
resheader=
resheader=response.getheaders();
print resheader
列形式的響應頭部信息:
?
1
2
3
[(content-length, 295), (accept-ranges, bytes), (server, Apache), (last-modified, Sat, 31 Mar 2012 10:07:02 GMT), (connection, close), (etag, e8744-127-4bc871e4fdd80), (date, Mon, 03 Sep 2012 10:01:47 GMT), (content-type, text/html)]
date=response.getheader(date);
print date
取出響應頭部的date的值。
希望本文所述對大家的Python程序設計有所幫助。
❷ python 能獲取網頁的網路請求嗎
(一)通過GET和POST方式獲取頁面內容
網路爬蟲,即Web Spider,是一個很形象的名字。
把互聯網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。
HTTP協議中定義了四個與伺服器進行交互的方法,分別是GET, POST,PUT,DELETE ,實際對應對伺服器內容的「增」刪「改」查「四個操作
本篇文章主要記錄我學習GET和POST請求方式的過程
首先,如何區分GET 和POST請求?
我們可以簡單地通過瀏覽器地址欄是否改變來加以區分。舉例說明,在網路上搜索CSDN時,頁面會跳轉到搜索結果頁,同時瀏覽器上方的URL也會發生改變。
如上圖所示,變化就在於,在最初的url後面會附加相關的欄位,以?分割url和請求的數據,這些數據就是你要查詢欄位的編碼。。而這個過程,就是典型的GET請求的情況。
POST請求則顯得」深藏不露「。它在於你必須通過瀏覽器輸入或提交一些伺服器需要的數據,才能給你返回完整的界面,這點其實與GET請求情況有相通之處,但是這個過程瀏覽器的地址欄是不會發生跳轉的。
那POST請求提交的數據是如何傳給伺服器的呢?可以採用一些分析頁面的手段來獲取上傳的數據。實際上,POST請求是將提交的數據放在HTTP包的包體中,這種方式無疑加強了數據的安全性,不像GET請求那樣,用戶可以通過跳轉的url就可以查看出向伺服器發送的數據。另外,POST請求除了提交數據外,還可以提交文件,這點也是GET請求做不到的。
總的來說,在做數據查詢時,建議用GET方式;而在做數據添加、修改或刪除時,建議用POST方式。
下面用具體代碼展示GET與POST方式的差異
#coding =utf-8import urllib2
url="httcom"req=urllib2.Request(url)#req表示向伺服器發送請求#response=urllib2.urlopen(req)#response表示通過調用urlopen並傳入req返回響應response#the_page=response.read()#用read解析獲得的HTML文件#print the_page#在屏幕上顯示出來#1234567
這是一個最簡單的爬蟲程序,功能類似於打開網路主頁。如果你此時用瀏覽器打開網路並查看其源代碼,會發現屏幕上的內容和瀏覽器中完全一樣,也就是說,上面這四行代碼將我們訪問網路時瀏覽器收到的代碼們全部列印了出來。
這就是一個最簡單的GET的例子。
再來看一個POST方式的例子
#code=utf-8import urllib2
import urllib
url='http'//把要發送的數據寫成字典value={ 'name':'BUPT', 'age':'60', 'location':'Beijing'#字典中的內容隨意,不影響#}
data=urllib.urlencode(value)#對value進行編碼,轉換為標准編碼#req=urllib2.Request(url,data)#向url發送請求,並傳送表單data#response=urllib2.urlopen(req)#獲取響應#the_page=response.read()#解析#print the_page#顯示#123456789101112131415
程序運行之後,你可以試試將獲取的網頁源代碼用瀏覽器打開,會發現得到的頁面是這樣的
因為我們向網站提供的數據是隨便寫的,並不存在,所以就會得到這樣的結果。
❸ 如何用C++或者python實現接收客戶端發送的post請求
一個http請求包括三個部分,分別為請求行,請求報頭(請求頭),消息主體(請求體),類似以下這樣:
{
「args」:{},
「data」:「」,
「files」:{
「file」:「Helloworld!」
},
「form」:{},
「headers」:{……
「Content-Type」:「multipart/form-data;boundary=」,
……
},
「json」:null,
……
}
---------------------
作者:weixin_40283480
來源:CSDN
原文:https://blog.csdn.net/weixin_40283480/article/details/79208413
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
❹ python requests 常用方法
requests 繼承了urllib2的所有特性,比urllib簡潔高效
requests所有功能都能通過"requests/api.py"中的方法訪問
1、安裝:
pip install requests
2、get請求:
封裝鏈接中的參數,請求時用params參數進行傳遞
url = " http://www..com "
resp = requests.get(url,params=,headers=)
3、post請求:
發送的數據必須放在字典中,通過data參數進行傳遞
url = " http://www..com "
resp = requests.post(url,data=,headers=)
4、查看響應內容:
print (resp.text ) # resp.text 返回的是Unicode格式的數據
print(resp.json()) # res.json() 返回的是json格式的數據
print(resp.content) # resp.content返回的位元組類型數據
print (resp.url) # 查看完整url地址
print (resp.encoding) # 查看響應頭部字元編碼
print(resp.status_code) # 查看響應碼
print(resp.cookies) # 查看返回的cookies
print(resp.r.elapsed) #響應速度,從發送請求到響應到達所需要的時間
5、Cookies
import requests
url = " http://www..com "
resp = requests.get(url)
cookiejar = resp.cookies # 返回cookies對象
cookiedic = requests.utils.dict_from_cookiejar(cookiejar) # 將cookies轉為字典
6、Sission
說明
1、發送請求前先創建一個session會話,將請求到的cookies存入session中
2、程序的請求要一直使用session.get/post,以保證cookies在程序中的傳遞
3、程序的請求如果使用requests.get/post需要在參數中增加headers{"cookie:":"****"},否則請求會報錯,因為requests.get/post每次執行都會重新開啟一個新的請求,丟失已獲取的cookies
例子:登錄17小說網拿到書架數據
import requests
session = requests.session() # 創建會話(session),將cookie存入session中
data = {
"loginName": "1 7",
"password": "1 5"
}
url = " https://passport.17k.com/ck/user/login "
resp1 = session.post(url,data=data) # 登錄,獲取cookies
resp2 = session.get(" https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919 ")
print(resp2.json())
7、防盜鏈處理
防盜鏈,本質上是溯源,即本次請求的上一次請求,請求時將referer地址加上即可
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36",
"Referer":" https://www.pearvideo.com/video_1734919 " # 防盜鏈:溯源,確認當前請求的上一級
}
❺ python中request的get和post請求方法詳解
一、安裝:pip install requests
二、基本概念
1、POST方法
通過 POST 發送到伺服器的數據存儲在 HTTP 請求的請求主體中:
2、get方法
查詢字元串(名稱/值對)是在 GET 請求的 URL 中發送的:
3、比較 GET 與 POST
下面的表格比較了兩種 HTTP 方法:GET 和 POST。
❻ python怎樣接收http協議返回的一個zip包
從頭開始,找到兩個換行符(前面是HEADER,包括伺服器、日期、長度、是否支持斷點等信息),後面的就是文件內容了.
❼ python的BaseHTTPServer模塊怎樣接收post請求能給出,把接收到的POST數據輸...
#!/usr/bin/python
#encoding=utf-8
'''
基於BaseHTTPServer的http server實現,包括get,post方法,get參數接收,post參數接收。
'''
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import io,shutil
import urllib
import os, sys
class MyRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
mpath,margs=urllib.splitquery(self.path) # ?分割
self.do_action(mpath, margs)
def do_POST(self):
mpath,margs=urllib.splitquery(self.path)
datas = self.rfile.read(int(self.headers['content-length']))
self.do_action(mpath, datas)
def do_action(self, path, args):
self.outputtxt(path + args )
def outputtxt(self, content):
#指定返回編碼
enc = "UTF-8"
content = content.encode(enc)
f = io.BytesIO()
f.write(content)
f.seek(0)
self.send_response(200)
self.send_header("Content-type", "text/html; charset=%s" % enc)
self.send_header("Content-Length", str(len(content)))
self.end_headers()
shutil.fileobj(f,self.wfile)
❽ pythonhttp請求引入變數
1. python程序部分
import argparse
FLAGS = tf.app.flags.FLAGS
office31_flags.train()
parser = argparse.ArgumentParser()
parser.add_argument('--unlabeled_data_path', type=str, default=None)
parser.add_argument('--labeled_train_data_dir', type=str, default=None)
parser.add_argument('--train_dir_for_save', type=str, default=None)
parser.add_argument('--pretrained_checkpoint_path', type=str, default=None)
parser.add_argument('--d_cross_entropy', type=float, default=None)
parser.add_argument('--d_fake', type=float, default=None)
parser.add_argument('--d_unlabel', type=float, default=None)
parser.add_argument('--g_fc7_match'早鎮, type=float, default=None)
parser.add_argument('跡數--g_logical', type=float, default=None)
parser.add_argument('陸州粗--g_image_match', type=float, default=None)
parser_parameters = parser.parse_args()
FLAGS.unlabeled_data_path = parser_parameters.unlabeled_data_path
FLAGS.labeled_train_data_dir = parser_parameters.labeled_train_data_dir
FLAGS.train_dir_for_save = parser_parameters.train_dir_for_save
FLAGS.pretrained_checkpoint_path = parser_parameters.pretrained_checkpoint_path
FLAGS.d_cross_entropy = parser_parameters.d_cross_entropy
FLAGS.d_fake = parser_parameters.d_fake
FLAGS.d_unlabel = parser_parameters.d_unlabel
FLAGS.g_fc7_match = parser_parameters.g_fc7_match
FLAGS.g_logical = parser_parameters.g_logical
FLAGS.g_image_match = parser_parameters.g_image_match
FLAGS.unlabeled_data_path = os.path.join(path, 'office_data/webcam')
FLAGS.labeled_train_data_dir = os.path.join(path, 'office_data/amazon')
FLAGS.train_dir_for_save = os.path.join(path, 'trained_dir')
FLAGS.pretrained_checkpoint_path = os.path.join(path, 'pretrained_model/bvlc_alexnet.npy')
parser.add_argument('--dataset', type=str, default='CIFAR10', choices=['MNIST', 'SVHN', 'CIFAR10'])
parser.add_argument('--learning_rate', type=float, default=1e-4)
parser.add_argument('--update_rate', type=int, default=5)
parser.add_argument('--lr_weight_decay', action='store_true', default=False)
parser.add_argument('--mp_result', action='store_true', default=False)