當前位置:首頁 » 編程語言 » python提交post

python提交post

發布時間: 2022-08-15 12:35:32

㈠ 如何用python requests post一段字元串

一個http請求包括三個部分,為別為請求行,請求報頭,消息主體,類似以下這樣:

請求行
請求報頭
消息主體

HTTP協議規定post提交的數據必須放在消息主體中,但是協議並沒有規定必須使用什麼編碼方式。服務端通過是根據請求頭中的Content-Type欄位來獲知請求中的消息主體是用何種方式進行編碼,再對消息主體進行解析。具體的編碼方式包括:

  • application/x-www-form-urlencoded
    最常見post提交數據的方式,以form表單形式提交數據。

  • application/json
    以json串提交數據。

  • multipart/form-data
    一般使用來上傳文件。

  • 2.7.1 以form形式發送post請求

    Reqeusts支持以form表單形式發送post請求,只需要將請求的參數構造成一個字典,然後傳給requests.post()的data參數即可。

  • url = 'htt.org/post'd = {'key1': 'value1', 'key2': 'value2'}

  • r = requests.post(url, data=d)

  • print r.text12341234

  • 輸出:

    {
    「args」: {},
    「data」: 「」,
    「files」: {},
    「form」: {
    「key1」: 「value1」,
    「key2」: 「value2」
    },
    「headers」: {
    ……
    「Content-Type」: 「application/x-www-form-urlencoded」,
    ……
    },
    「json」: null,
    ……
    }

    可以看到,請求頭中的Content-Type欄位已設置為application/x-www-form-urlencoded,且d = {'key1': 'value1', 'key2': 'value2'}以form表單的形式提交到服務端,服務端返回的form欄位即是提交的數據。

    2.7.2 以json形式發送post請求

    可以將一json串傳給requests.post()的data參數,

  • url = 'httin.org/post's = json.mps({'key1': 'value1', 'key2': 'value2'})

  • r = requests.post(url, data=s)

  • print r.text12341234

  • 輸出:

    {
    「args」: {},
    「data」: 「{」key2」: 」value2」, 」key1」: 」value1」}」,
    「files」: {},
    「form」: {},
    「headers」: {
    ……
    「Content-Type」: 「application/json」,
    ……
    },
    「json」: {
    「key1」: 「value1」,
    「key2」: 「value2」
    },
    ……
    }

    可以看到,請求頭的Content-Type設置為application/json,並將s這個json串提交到服務端中。

    2.7.3 以multipart形式發送post請求

    Requests也支持以multipart形式發送post請求,只需將一文件傳給requests.post()的files參數即可。

  • url = 'htt.org/post'files = {'file': open('report.txt', 'rb')}

  • r = requests.post(url, files=files)

  • print r.text12341234

  • 輸出:

    {
    「args」: {},
    「data」: 「」,
    「files」: {
    「file」: 「Hello world!」
    },
    「form」: {},
    「headers」: {……
    「Content-Type」: 「multipart/form-data; boundary=」,
    ……
    },
    「json」: null,
    ……
    }

    文本文件report.txt的內容只有一行:Hello world!,從請求的響應結果可以看到數據已上傳到服務端中。

㈡ python中scrapy怎麼發送一個post請求

參數:
url (string) – 請求的URL
callback (callable) – the function that will be called with the response of this request (once its downloaded) as its first parameter. For more information see Passing additional data to callback functions below. If a Request doesn』t specify a callback, the spider』s parse() method will be used. Note that if exceptions are raised ring processing, errback is called instead.
method (string) – 此請求的HTTP方法。默認是 'GET'。
meta (dict) – Request.meta 屬性的初始值。 一旦此參數被設置, 通過參數傳遞的字典將會被淺拷貝。
body (str or unicode) – request體。如果傳進的參數是 unicode 類型,將會被編碼為 str 類型。如
果 body 參數沒有給定,那麼將會存儲一個空的string類型,不管 這個參數是什麼類型的,最終存儲的都會是 str 類型(永遠不會
是 unicode 或是 None)。
headers (dict) – 請求頭。字典值的類型可以是strings (for single valued headers) 或
是 lists (for multi-valued headers)。如果傳進的值是 None ,那麼HTTP頭將不會被發送。
cookies (dict or list) –
請求的cookies。可以被設置成如下兩種形式。

㈢ 如何用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 提交post數據求助

這又不知道你的defput_tickets(item_id,username,password,oid,tickets,active函數裡面的參數到底是怎麼樣子的

你把

try:
return_put_tickets(item_id,username,password,oid,tickets,active)
exceptException:
printu'提交錯誤,重試中....測試版'

這個加個print語句
try:
return_put_tickets(item_id,username,password,oid,tickets,active)
exceptException,e:
printe#這里會列印異常原因
printu'提交錯誤,重試中....測試版'
或者直接把tryexcept去掉看看報錯信息

㈤ python怎麼發送post請求

我使用的的python3.5,代碼如下:

fromurllib.parseimporturlencode
fromurllib.requestimporturlopen
defsend_to_server(url,post_data=None):
ifpost_data:
para=urlencode(post_data)
page=urlopen(url,para.encode('utf-8'))#注意這里不encode會報錯
else:
page=urlopen(url)
return(page.read().decode('utf-8'))

㈥ 如何用Python寫一個http post請求

python發送post和get請求
get請求:
使用get方式時,請求數據直接放在url中。
方法一、
importurllib
importurllib2
url="<ahref="http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa""target="_blank">http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa"</a>
req=urllib2.Request(url)
printreq
res_data=urllib2.urlopen(req)
res=res_data.read()
printres
方法二、
importhttplib
url="<ahref="http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa""target="_blank">http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa"</a>
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="<ahref="http://192.168.81.16/cgi-bin/python_test/test.py""target="_blank">http://192.168.81.16/cgi-bin/python_test/test.py"</a>
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="<ahref="http://192.168.81.16/cgi-bin/python_test/test.py""target="_blank">http://192.168.81.16/cgi-bin/python_test/test.py"</a>
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怎麼響應後端發送get,post請求的介面

測試用CGI,名字為test.py,放在apache的cgi-bin目錄下:
#!/usr/bin/Python
import cgi
def main():
print "Content-type: text/html "
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中。
方法一、
import urllib
import urllib2

url = "http://192.168.81.16/cgi-bin/python_test/test.py?ServiceCode=aaaa"

req = urllib2.Request(url)
print req

res_data = urllib2.urlopen(req)
res = res_data.read()
print res

方法二、
import httplib

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()
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 = "http://192.168.81.16/cgi-bin/python_test/test.py"

req = urllib2.Request(url = requrl,data =test_data_urlencode)
print req

res_data = urllib2.urlopen(req)
res = res_data.read()
print res


方法二、
import urllib
import httplib
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()

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="http://192.168.81.16/cgi-bin/python_test/test.py" 請求CGI

或者

url="http://192.168.81.16/python_test/test.html" 請求頁面
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 = "http://192.168.81.16/cgi-bin/python_test/test.py"
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
例如:

date=response.getheader('date');
print date
resheader=''
resheader=response.getheaders();
print resheader

列形式的響應頭部信息:

[('content-length','295'),('accept-ranges','bytes'),('server','Apache'),('last-modified','Sat,31Mar201210:07:02GMT'),('connection','close'),('etag','"e8744-127-4bc871e4fdd80"'),('date','Mon,03Sep201210:01:47GMT'),('content-type','text/html')]

date=response.getheader('date');
print date

取出響應頭部的date的值。

******************************************************************************************************************************************************************************************************************************************************

所謂網頁抓取,就是把URL地址中指定的網路資源從網路流中讀取出來,保存到本地。
類似於使用程序模擬IE瀏覽器的功能,把URL作為HTTP請求的內容發送到伺服器端, 然後讀取伺服器端的響應資源。

在Python中,我們使用urllib2這個組件來抓取網頁。
urllib2是Python的一個獲取URLs(Uniform Resource Locators)的組件。

它以urlopen函數的形式提供了一個非常簡單的介面。

最簡單的urllib2的應用代碼只需要四行。

我們新建一個文件urllib2_test01.py來感受一下urllib2的作用:

import urllib2
response = urllib2.urlopen('http://www..com/')
html = response.read()
print html


按下F5可以看到運行的結果:

我們可以打開網路主頁,右擊,選擇查看源代碼(火狐OR谷歌瀏覽器均可),會發現也是完全一樣的內容。

也就是說,上面這四行代碼將我們訪問網路時瀏覽器收到的代碼們全部列印了出來。

這就是一個最簡單的urllib2的例子。

除了"http:",URL同樣可以使用"ftp:","file:"等等來替代。

HTTP是基於請求和應答機制的:

客戶端提出請求,服務端提供應答。

urllib2用一個Request對象來映射你提出的HTTP請求。

在它最簡單的使用形式中你將用你要請求的地址創建一個Request對象,

通過調用urlopen並傳入Request對象,將返回一個相關請求response對象,

這個應答對象如同一個文件對象,所以你可以在Response中調用.read()。

我們新建一個文件urllib2_test02.py來感受一下:

import urllib2
req = urllib2.Request('http://www..com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page

可以看到輸出的內容和test01是一樣的。

urllib2使用相同的介面處理所有的URL頭。例如你可以像下面那樣創建一個ftp請求。

req = urllib2.Request('ftp://example.com/')

在HTTP請求時,允許你做額外的兩件事。

1.發送data表單數據

這個內容相信做過Web端的都不會陌生,

有時候你希望發送一些數據到URL(通常URL與CGI[通用網關介面]腳本,或其他WEB應用程序掛接)。

在HTTP中,這個經常使用熟知的POST請求發送。

這個通常在你提交一個HTML表單時由你的瀏覽器來做。

並不是所有的POSTs都來源於表單,你能夠使用POST提交任意的數據到你自己的程序。

一般的HTML表單,data需要編碼成標准形式。然後做為data參數傳到Request對象。

編碼工作使用urllib的函數而非urllib2。

我們新建一個文件urllib2_test03.py來感受一下:

import urllib
import urllib2
url = 'http://www.someserver.com/register.cgi'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
data = urllib.urlencode(values) # 編碼工作
req = urllib2.Request(url, data) # 發送請求同時傳data表單
response = urllib2.urlopen(req) #接受反饋的信息
the_page = response.read() #讀取反饋的內容

如果沒有傳送data參數,urllib2使用GET方式的請求。

GET和POST請求的不同之處是POST請求通常有"副作用",

它們會由於某種途徑改變系統狀態(例如提交成堆垃圾到你的門口)。

Data同樣可以通過在Get請求的URL本身上面編碼來傳送。

import urllib2
import urllib
data = {}
data['name'] = 'WHY'
data['location'] = 'SDU'
data['language'] = 'Python'
url_values = urllib.urlencode(data)
print url_values
name=Somebody+Here&language=Python&location=Northampton
url = 'http://www.example.com/example.cgi'
full_url = url + '?' + url_values
data = urllib2.open(full_url)

這樣就實現了Data數據的Get傳送。

2.設置Headers到http請求

有一些站點不喜歡被程序(非人為訪問)訪問,或者發送不同版本的內容到不同的瀏覽器。

默認的urllib2把自己作為「Python-urllib/x.y」(x和y是Python主版本和次版本號,例如Python-urllib/2.7),

這個身份可能會讓站點迷惑,或者乾脆不工作。

瀏覽器確認自己身份是通過User-Agent頭,當你創建了一個請求對象,你可以給他一個包含頭數據的字典。

下面的例子發送跟上面一樣的內容,但把自身模擬成Internet Explorer。

(多謝大家的提醒,現在這個Demo已經不可用了,不過原理還是那樣的)。

import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()

以上就是python利用urllib2通過指定的URL抓取網頁內容的全部內容,非常簡單吧,希望對大家能有所幫助

㈧ python 關於post和get的區別

1.GET是從伺服器上獲取數據,POST是向伺服器傳送數據。
2.在客戶端,GET方式在通過URL提交數據,數據在URL中可以看到,POST方式,數據放置在HTML——HEADER內提交。
3.對於GET方式,伺服器端用Request.QueryString獲取變數的值,對於POST方式,伺服器端用Request.Form獲取提交的數據。

㈨ Python爬蟲傳送post請求要攜帶哪些參數

Traceback (most recent call last):
File "/home/qians2014/文檔/_proj_/spider.py", line 11, in <mole>
response = urllib.request.urlopen(req)
File "/usr/lib/python3.3/urllib/request.py", line 160, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.3/urllib/request.py", line 471, in open
req = meth(req)
File "/usr/lib/python3.3/urllib/request.py", line 1183, in do_request_
raise TypeError(msg)
TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.
這個是run以後的問題。求解。下面貼上我的代碼。用的python3.3 urllib寫的。

import urllib.request
import urllib.parse

url = "http://xscj.hit.e.cn/hitjwgl/xs/jscx_all.asp"
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/30.0.1599.114 Chrome/30.0.1599.114 Safari/537.36'
values = {'Submit':'%C8%AB%B2%BF%E4%AF%C0%C0','ZC':'11','XQ':'%D2%BB%D0%A3%C7%F8'}
headers = {'User-Agent':user_agent}

data = urllib.parse.urlencode(values)
req = urllib.request.Request(url,data,headers)
response = urllib.request.urlopen(req)
the_page = response.read()

print(the_page.decode("utf8"))

㈩ python中post提交json問題

importurllib
importurllib2

url=''
info={"name":"user"}
data=urllib.urlencode(info)
urlib2.urlopen(url,data=data)

熱點內容
資料庫中已存在 發布:2025-01-20 15:35:44 瀏覽:109
壓縮超過密度 發布:2025-01-20 15:35:33 瀏覽:647
和她在一起的日歷怎麼弄安卓 發布:2025-01-20 15:29:29 瀏覽:639
android6華為 發布:2025-01-20 15:28:06 瀏覽:692
荔枝fm怎麼上傳錄音 發布:2025-01-20 15:22:27 瀏覽:107
馬3智雅版有哪些配置 發布:2025-01-20 15:03:06 瀏覽:362
離心機編程 發布:2025-01-20 15:02:24 瀏覽:945
按鍵的匯編程序程序 發布:2025-01-20 15:01:04 瀏覽:555
linux有哪些系統 發布:2025-01-20 14:53:38 瀏覽:90
android顯示當前時間 發布:2025-01-20 14:53:29 瀏覽:968