1. 程式人生 > >python通過get方式,post方式傳送http請求和接收http響應-urllib urllib2

python通過get方式,post方式傳送http請求和接收http響應-urllib urllib2

測試用CGI,名字為test.py,放在apache的cgi-bin目錄下:
#!/usr/bin/python
import cgi
def main():
    print "Content-type: text/html\n"
    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

req = urllib2.Request(url)
print req

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

方法二、
import httplib

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)

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)

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/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, 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通過get方式,post方式傳送http請求接收http響應-urllib urllib2

測試用CGI,名字為test.py,放在apache的cgi-bin目錄下: #!/usr/bin/python import cgi def main():     print "Content-type: text/html\n"     form = cgi.FieldStorage()     i

python通過get方式,post方式,delete,put傳送http請求接收http響應

測試用CGI,名字為test.py,放在apache的cgi-bin目錄下: #!/usr/bin/Python import cgi def main(): print "Content-type: text/html\n" form

Unity3D 通過GetPost方式與伺服器端進行互動

<p style="padding-top: 10px; padding-bottom: 10px; margin-top: 0px; margin-bottom: 0px; line-height: 25px; color: rgb(51, 51, 51); fon

HTTP 請求GETPOST 方式的區別

瀏覽器 tro 名稱 安全 data 回文 部分 strong 長度 HTTP 請求的 GET 與 POST 方式的區別 在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。 GET - 從指定的資源請求數據。 POST - 向指定的資源提

HTTP請求GETPOST 方式的區別

Http 定義了與伺服器互動的不同方法,最基本的方法有 4 種,分別是 GET,POST,PUT,DELETE。 URL 全稱是資源描述符,我們可以這樣認為:一個 URL 地址,它用於描述一個網路上的資源,而 HTTP 中的 GET,POST,PUT,DELETE 就對應著

PHP:CURL分別以GETPOST方式請求HTTPS協議接口api

json格式 gen useragent pin php curl 檢查 協議 處理 訪問 1、curl以GET方式請求https協議接口 //註意:這裏的$url已經包含參數了,不帶參數你自己處理哦GET很簡單 function curl_get_https($url

Volley的GetPost方式(JsonObjectRequest、StringRequest)以及Volley獲取圖片的3種方式

volley use utf-8 設置 ica static toast 隊列 getheight activity_main.xml 裏面什麽也沒有 AndroidManifest.xml(重點是android:name="com.example.vo

Ajax案例-基於HTML,以GETPOST方式,檢查註冊使用者名稱是否在資料庫中已存在

08_register.jsp <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html&

python通過定製路徑的方式解析介面返回資料

該問題基於http://stackoverflow.com/questions/7320319/xpath-like-query-for-nested-python-dictionaries的討論,原始碼來自於pyresttest的實現。 問題:在做介面測試時,經常需要檢查

Laravel通過ajax的POST方式傳值並實現頁面跳轉

1.新增測試按鈕 <button class='test' >ajax測試</button> 2.ajax部分程式碼 @section('js') <scr

PHP:CURL分別以GETPOST方式請求HTTPS協議介面api

1、curl以GET方式請求https協議介面 //注意:這裡的$url已經包含引數了,不帶引數你自己處理哦GET很簡單 function curl_get_https($url){ $curl = curl_init(); // 啟動一個CURL會話 curl_setopt($cu

通過Ajax的post方式前端引數傳到後端與URLEncoder與URLDecoder編解碼問題

Ajax傳遞大量引數的時候是是以url的形式傳遞到後端的,即在url後面拼接問號加引數的格式拼成向後端訪問的引數。 在把請求引數給ajax之前一般會進行序列化: 例如var param = $('.q

用IO流方法getpost 方式提交

get方式提交 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import j

C# 通過GetPost、Soap呼叫WebService的方法

原文: http://www.cnblogs.com/zuowj/p/4267585.html 由於需求需要 居然用到了soap請求 第一次用啊 用谷歌 百度找了很久 最後找到這個大神的 還不錯 分享之using System; using System.Web; usin

Python 通過連線qq郵箱伺服器傳送郵件

python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。 傳送郵件主要用到了smtplib 和 email 程式碼非常簡單,上程式碼: import smtplib from email.mime.text import MIME

在HTML中用js獲取通過GETPOST方法(就是在網址後加?a=b&c=d之類)傳過來的表單值

<script type="text/javascript">    //獲取指定form中的所有的<input>物件    function getElements(formId) {        var form = document.

AFNetworking PUT、DELETE、GETPOST封裝方法設定請求

1、GET + (void)requestGETSuperAPIWithURLStr:(NSString *)urlStr WithAuthorization:(NSString *)authorization paramDic:(NSDictionary *)paramD

axios的使用方法--即GETPOST、 OPTION 、請求攔截的使用

axios的使用方法–即GET、POST、 OPTION 、請求攔截的使用 axios怎樣在全域性使用 get傳遞引數和傳遞token post傳遞引數和token option的使用 *攔截器的使用 axios怎樣在全域性使用 0

JAVA傳送http請求,呼叫http介面與方法

1.傳送POST請求,無引數名呼叫。 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import

Java socket模擬傳送接收HTTP訊息

理解:模擬登陸指定網站,登陸成功後,獲取返回串中的cookie值用於發起下次請求。 package demo.http.client; import java.io.IOException; import java.io.InputStream; import java.