① servlet里如何處理post和get請求
J2EE:servlet 有專門處理的方法函數啊
post請求在doPost裡面寫
get請求在doGet裡面寫
下面是一個空的servlet響應類
init 初始化 destroy銷毀 doGet處理頁面的get請求 doPost處理頁面的POST請求
除了post請求 其他方式訪問請求全部歸屬於doGet處理
package tony.com.cn;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class action
*/
public class action extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public action() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
}
}
② 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抓取網頁內容的全部內容,非常簡單吧,希望對大家能有所幫助
③ 新手求助,Arino聯網後,如何回應HttpClient的GET請求
Android聯網可以採用HttpPost,HttpGet封裝post請求和get請求,再使用HttpClient的excute方法發送post或者get請求並返回伺服器的響應數據。
1、設置連接和讀取超時時間,並新建HttpClient對象:
// 設置連接超時時間和數據讀取超時時間
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,
30000);
HttpConnectionParams.setSoTimeout(httpParams,
30000);
//新建HttpClient對象
HttpClient httpClient = new DefaultHttpClient(httpParams);
2、Get請求:
HttpPost post = new HttpPost(KeySource.HOST_URL_STR);
// set HTTP head parameters
Map<String, String> headers = heads;
Set<String> setHead = headers.keySet();
Iterator<String> iteratorHead = setHead.iterator();
while (iteratorHead.hasNext())
{
String headName = iteratorHead.next();
String headValue = (String) headers.get(headName);
post.setHeader(headName, headValue);
}
/**
* 通常的HTTP實體需要在執行上下文的時候動態生成的。
* HttpClient的提供使用EntityTemplate實體類和 ContentProcer介面支持動態實體。
* 內容製作是通過寫需求的內容到一個輸出流,每次請求的時候都會產生。
* 因此,通過EntityTemplate 創建實體通常是獨立的,重復性好。
*/
ontentProcer cp = new ContentProcer()
{
public void writeTo(OutputStream outstream)
throws IOException
{
Writer writer = new OutputStreamWriter(outstream,
"UTF-8");
writer.write(requestBody);
writer.flush();
writer.close();
}
};
HttpEntity entity = new EntityTemplate(cp);
post.setEntity(entity);
}
//執行connect ,需要try ,catch處理
response = httpClient.execute(post);
3、Post請求:
HttpPost post = new HttpPost(KeySource.HOST_URL_STR);
// set HTTP head parameters
Map<String, String> headers = heads;
Set<String> setHead = headers.keySet();
Iterator<String> iteratorHead = setHead.iterator();
while (iteratorHead.hasNext())
{
String headName = iteratorHead.next();
String headValue = (String) headers.get(headName);
post.setHeader(headName, headValue);
}
/**
* 通常的HTTP實體需要在執行上下文的時候動態生成的。
* HttpClient的提供使用EntityTemplate實體類和ContentProcer介面支持動態實體。
* 內容製作是通過寫需求的內容到一個輸出流,每次請求的時候都會產生。
* 因此,通過EntityTemplate創建實體通常是獨立的,重復性好。
*/
ContentProcer cp = new ContentProcer()
{
public void writeTo(OutputStream outstream)
throws IOException
{
Writer writer = new OutputStreamWriter(outstream,
"UTF-8");
writer.write(requestBody);
writer.flush();
writer.close();
}
};
HttpEntity entity = new EntityTemplate(cp);
post.setEntity(entity);
}
//connect ,need try catch
response = httpClient.execute(post);
4、請求Response響應處理:
if (response.getStatusLine().getStatusCode() == 200)
{
// get response xml.
/**
* 因為直接調用toString可能會導致某些中文字元出現亂碼的情況。所以此處使用toByteArray
* 如果需要轉成String對象,可以先調用EntityUtils.toByteArray()方法將消息實體轉成byte數組,
* 在由new String(byte[] bArray)轉換成字元串。
*/
byte[] bResultXml = EntityUtils.toByteArray(response
.getEntity());
if (bResultXml != null)
{
String strXml = new String(bResultXml, "utf-8");
}
}
//Todo xmlAnalysis..
④ angular js中 http.get方法怎麼用
我們可以使用內置的$http服務直接同外部進行通信。$http服務只是簡單的封裝了瀏覽器原生的XMLHttpRequest對象。
1、鏈式調用
$http服務是只能接受一個參數的函數,這個參數是一個對象,包含了用來生成HTTP請求的
配置內容。這個函數返回一個promise對象,具有success和error兩個方法。
$http({
url:'data.json',
method:'GET'
}).success(function(data,header,config,status){
//響應成功
}).error(function(data,header,config,status){
//處理響應失敗
});
2、返回一個promise對象
var promise=$http({
method:'GET',
url:"data.json"
});
由於$http方法返回一個promise對象,我們可以在響應返回時用then方法來處理回調。如果
使用then方法,會得到一個特殊的參數,它代表了相應對象的成功或失敗信息,還可以接受兩個
可選的函數作為參數。或者可以使用success和error回調代替。
promise.then(function(resp){
//resp是一個響應對象
},function(resp){
//帶有錯誤信息的resp
});
或者這樣:
promise.success(function(data,status,config,headers){
//處理成功的響應
});
promise.error(function(data,status,hedaers,config){
//處理失敗後的響應
});
then()方法與其他兩種方法的主要區別是,它會接收到完整的響應對象,而success()和error()則會對響應對
象進行析構。
3、快捷的get請求
①$http.get('/api/users.json');
get()方法返回HttpPromise對象。
還可以發送比如:delete/head/jsonp/post/put 函數內可接受參數具體參照148頁
②以再發送jsonp請求舉例說明: 為了發送JSONP請求,其中url必須包含JSON_CALLBACK字樣。
jsonp(url,config) 其中config是可選的
var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");
4、也可以將$http當做函數來使用,這時需要傳入一個設置對象,用來說明如何構造XHR對象。
$http({
method:'GET',
url:'/api/users.json',
params:{
'username':'tan'
});
其中設置對象可以包含以下主要的鍵:
①method
可以是:GET/DELETE/HEAD/JSONP/POST/PUT
②url:絕對的或者相對的請求目標
③params(字元串map或者對象)
這個鍵的值是一個字元串map或對象,會被轉換成查詢字元串追加在URL後面。如果值不是字元串,會被JSON序列化。
比如這個:
//參數會轉為?name=ari的形式
$http({
params:{'name':'ari'}
});
④data(字元串或者對象)
這個對象中包含了將會被當作消息體發送給伺服器的數據。通常在發送POST請求時使用。
從AngularJS 1.3開始,它還可以在POST請求里發送二進制數據。要發送一個blob對象,你可以簡單地通過使用data參數來傳遞它。
例如:
var blob=new Blob(['Hello world'],{type:'text/plain'});
$http({
method:'POST',
url:'/',
data:blob
});
4、響應對象
AngularJS傳遞給then()方法的響應對象包含了四個屬性。
◇data
這個數據代表轉換過後的響應體(如果定義了轉換的話)
◇status
響應的HTTP狀態碼
◇headers
這個函數是頭信息的getter函數,可以接受一個參數,用來獲取對應名字值
例如,用如下代碼獲取X-Auth-ID的值:
$http({
method: 'GET',
url: '/api/users.json'
}).then (resp) {
// 讀取X-Auth-ID
resp.headers('X-Auth-ID');
});
◇config
這個對象是用來生成原始請求的完整設置對象。
◇statusText(字元串)
這個字元串是響應的HTTP狀態文本。
5、緩存HTTP請求
默認情況下,$http服務不會對請求進行本地緩存。在發送單獨的請求時,我們可以通過向$http請求傳入一個布爾值或者一個緩存實例來啟用緩存。
$http.get('/api/users.json',{ cache: true })
.success(function(data) {})
.error(function(data) {});
第一次發送請求時,$http服務會向/api/users.json發送一個GET請求。第二次發送同一個GET請求時,$http服務會從緩存中取回請求的結果,而不會真的發送一個HTTP GET請求。
在這個例子里,由於設置了啟用緩存,AngularJS默認會使用$cacheFactory,這個服務是AngularJS在啟動時自動創建的。
如果想要對AngularJS使用的緩存進行更多的自定義控制,可以向請求傳入一個自定義的緩存實例代替true。
⑤ 關於Http協議的get方法和post方法的區別和用法
(一)get方法和post方法簡介
查看了MSDN,並且實際寫了一番程序,才明白get方法和post方法的不同。其實二者實現的功能相同,都是客戶端提交資料庫給伺服器端,只是實現的機制不同而已。get方法實際上就是通過網頁的URL地址實現數據的傳送,而伺服器端實現從URL地址中解析數據;而post方法則是通過表單的方式提交,數據採取加密方式傳送,伺服器接到請求後解析數據。從安全形度上看,post方法更安全,get方法可以直接從瀏覽器直接提交數據,而post方法則必須從網頁提交表單。
(二)get方法和post方法實現
啰嗦了一通,還是講講兩種方法如何實現的吧。
1、get方法VC實現
閑話少說,直接看代碼,VC6.0標准類庫函數CInternetSession,更詳細的用法,請查看MSDN。
CInternetSession tInternet;
CStdioFile* tFile;
char tChars[2056];
memset(tChars,0,2056);
sprintf(tChars,"%s","http://127.0.0.1:8080/app?username=123&password=123&data=111111111111");
tFile = tInternet.OpenURL(tChars,1, INTERNET_FLAG_TRANSFER_ASCII,NULL,0);
memset(tChars,0,2056);
tFile->Read(tChars,2056);
發送的超鏈接中,app是數據應用程序部署,在資料庫端要有該程序的響應,資料庫才會接收數據。程序的數據已經保存在了該URL中。
其實發送URL的方法有很多,API函數,C++ Builder中的空間都可以實現該功能。
2、post方法實現
(1)、仍然使用CInternetSession類
char chHeader[128];
char chData[128];
char tChars[128];
memset(tChars,0,128);
CInternetSession session;
CHttpConnection* pConnection=NULL;
CHttpFile* pFile=NULL;
INTERNET_PORT nPort=8080;
strcpy(chHeader,"Content-Type: application/x-www-form-urlencoded");
strcpy(chData,"username=123&password=123&data=123456789012345");
pConnection = session.GetHttpConnection("127.0.0.1",nPort);
pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/app");
pFile->SendRequest(chHeader,(DWORD)strlen(chHeader),(LPVOID *)chData,strlen(chData));
pFile->Read(tChars,128);
session.Close();
(2)、使用TCP/IP協議傳輸數據
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name="127.0.0.1";
char* req=
"POST http://127.0.0.1:8080/app?username=123&password=123&data=111111111111 HTTP/1.1\r\n"
"From: local\r\n"
"User-Agent: receiver/Receiver/1.1\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 0\r\n\r\n";
char tChars[128];
if(WSAStartup(winsock_version,&wsadata))
{
MessageBox("can't initial socket");
}
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
{
MessageBox("lphostent is null");
}
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET;
saServer.sin_port = htons(8080);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if(nRet == SOCKET_ERROR)
{
MessageBox("Can't connect");
closesocket(hsocket);
return;
}
else
{
MessageBox("connected with host");
}
nRet = send(hsocket, req, strlen(req), 0);
if(nRet == SOCKET_ERROR)
{
MessageBox("send() failed");
closesocket(hsocket);
}
else
{
MessageBox("send() OK");
}
char dest[1000];
nRet=0;
while(nRet>0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
if(nRet>0)
{
dest[nRet]=0;
}
else
{
dest[0]=0;
}
sprintf(tChars,"Received bytes:%d",nRet);
MessageBox(tChars);
sprintf(tChars,"Result:%s",dest);
MessageBox(tChars);
}
(2)、使用API函數
HINTERNET hInternetOpen = InternetOpen("http://127.0.0.1:8080/app",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
if(hInternetOpen < 0 )
{
MessageBox("Can't open the page");
}
HINTERNET hInternetConnect = InternetConnect(hInternetOpen,
"127.0.0.1",
8080,
NULL,
"HTTP/1.1",
INTERNET_SERVICE_HTTP,
0,
0);
if(hInternetConnect < 0 )
{
MessageBox("Can't connect to the server");
}
HINTERNET hHttpOpenRequest = HttpOpenRequest(hInternetConnect,
"POST",
"/IFCS/IMEICheck",
"HTTP/1.1",
NULL,
0,
INTERNET_FLAG_RELOAD,
0);
if(hHttpOpenRequest < 0 )
{
MessageBox("Open request fail");
}
char chData[128] = "username=123&password=123&data=123456789000001";
DWORD len = strlen(chData);
int bRet = HttpSendRequest(hHttpOpenRequest,
"Content-Type: application/x-www-form-urlencoded\r\n",
strlen("Content-Type: application/x-www-form-urlencoded\r\n"),
(LPVOID *)chData,
len);
char tChars[128];
memset(tChars,0,128);
DWORD dwReadLen;
InternetReadFile(hHttpOpenRequest,(LPVOID *)tChars,128,&dwReadLen);
if(dwReadLen > 0)
{
MessageBox(tChars);
}
else
{
MessageBox("Read the reply fail");
}
InternetCloseHandle(hHttpOpenRequest);
InternetCloseHandle(hInternetConnect);
InternetCloseHandle(hInternetOpen);
⑥ 我的網站怎麼響應用戶的get
那就看你懂不懂開發了
php,java,asp都可以做到
接收用戶的get參數,返回指定結果
關鍵是你懂不懂這些代碼
如果不懂還是找人幫你吧
希望能幫助到你
⑦ 如何對http的get請求進行處理與響應
:原理區別: 在瀏覽器中輸入網址訪問資源都是通過GET方式;在FORM提交中,可以通過Method指定提交方式為GET或者POST,默認為GET提交。 HTTP 定義了與伺服器交互的不同方法,最常用的有4種,Put(增),Delete(刪),
⑧ 如何用get方post方式向http介面發送數據
本文實例講述了python通過get,post方式發送http請求和接收http響應的方法。分享給大家供大家參考。具體如下:
測試用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
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, 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的值。
⑨ iOS開發 GET、POST請求方法(NSURLConnection篇)
Web Service使用的主要協議是HTTP協議,即 超文本傳輸協議 。
HTTP/1.1協議共定義了8種請求方法(OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT)作為Web伺服器。
GET方法 ,是向指定的資源發送請求,請求的參數「顯式」地在URL的後面。有點像明信片,把內容「顯式」寫在外面,因此安全性比較差。一般使用於讀取數據、例如從伺服器讀取靜態圖片、或查詢數據等。
POST方法 ,是向指定資源提交數據,請求伺服器進行處理,數據包含在 請求體 中。參數和地址分開,放在body裡面。有點像把信內容放在信封中,接觸的人看不到,安全性比較高。一般用於例如提交表單、上傳文件等(請求的的動態資源,與查詢類似,每個方法調用都要傳遞很多參數,因此需要使用NSMutableURLRequest創建請求。 )
iOS SDK中為HTTP請求提供了同步和非同步請求這兩種不同的API,
同步請求,可以從網際網路請求數據,一旦發送同步請求,程序將停止用戶交互,直至伺服器返回數據完成,才可以進行下一步操作,意味著線程阻塞;
非同步請求,不會阻塞主線程,而會建立一個新的線程來操作,用戶發出非同步請求後,依然可以對UI進行操作,程序可以繼續運行;
它們的主要區別在於連接方式的不同。
下面通過請求一個登陸介面介紹有關於網路請求中的不同情況。
【本次開發環境: Xcode:7.2 iOS Simulator:iphone6 By:啊左】
一、GET方法
1.同步get方法:
//1.創建一個web路徑
NSString*webPath=[NSString stringWithFormat:@"http://172.16.2.254/php/phonelogin?name=%@&pass=%@&btn=login",yourname,yourpass];
webPath=[webPath :NSUTF8StringEncoding]; //url不允許為中文等特殊字元,需要進行字元串的轉碼為URL字元串,例如空格轉換後為「%20」;
NSURL *url=[NSURL URLWithString:webPath];
//2.根據WEB路徑創建一個請求
NSURLRequest *request=[NSURLRequest requestWithURL:url];
NSURLResponse *respone;//獲取連接的響應信息,可以為nil
NSError *error; //獲取連接的錯誤時的信息,可以為nil
//3.得到伺服器數據
NSData*data=[NSURLConnection sendSynchronousRequest: request returningResponse: respone error: &error];
if(data==nil) { NSLog(@"登陸失敗:%@,請重試",error); return; }
/* 4.對伺服器獲取的數據data進行相應的處理; */
2.非同步get方法:
非同步請求與同步請求的不同在於使用NSURLConnectionDataDelegate委託協議,指定代理.
@interface ViewController : UIViewController // 遵循協議
@property (weak,nonatomic) NSMutableData *receiveData; //創建一個可變data,用於非同步接收伺服器的數據
@end
創建網路請求:
//1.創建一個web路徑
NSString*webPath=[NSString stringWithFormat: @"http://172.16.2.254/php/phonelogin?name=%@&pass=%@&btn=login",yourname,yourpass];
webPath=[webPath :NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:webPath];
//2.根據WEB路徑創建一個請求
NSURLRequest *request=[NSURLRequest requestWithURL:url];
//3.指定代理 以非同步的方式接收數據NSURLConnectionDataDelegate
NSURLConnection *con=[NSURLConnection connectionWithRequest:request delegate:self];
if(con==nil)
{
NSLog(@"創建連接失敗.");
return;
}
else//成功 准備接數據
{
if(self.receiveData==nil)
{
self.receiveData=[[NSMutableData alloc] init];
}
}
非同步的代理行為:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"已經響應成功.");
//清空 為當前連接做准備
self.receiveData.length=0;
}
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"已經接收到了數據.");
//追加接收到的數據
[self.receiveData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"接收數據已經完成.");
/* 對伺服器獲取的數據receiveData進行相應的處理; */
}
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"連接失敗.");
}
二、POST方法
1.同步post方法:
//1.創建一個web路徑
NSString *webPath=@"http://172.16.2.254/php/phoneloginpost.php";
webPath = [webPath :NSUTF8StringEncoding]; NSURL *url=[NSURL URLWithString:webPath];
//2.建立一個帶協議緩存類型的請求 (使用NSMutableURLRequest,是post方法的關鍵) NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:() timeoutInterval:10]; //3.設置表單提交的方法(默認為get) [request setHTTPMethod: @"post"];
//4.設置要提交的參數 NSString *args=[NSString stringWithFormat:@"uname=%@&upas=%@&btn=login",uname,upas]; [request setHTTPBody: [args dataUsingEncoding:NSUTF8StringEncoding]];
NSData *recvData=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; if(recvData!=nil) {
/*
對伺服器獲取的數據recvData進行相應的處理
*/
}
else
{
NSLog(@"連接失敗,請重試!");
}
2.post方法的非同步與同步的區別在於使用NSURLConnectionDataDelegate委託協議,指定代理.
這一點與get方法一致,所以就不進行長篇幅的演示了。
以上就是關於部分網路同步非同步請求,get、post請求方法的演示,由於UI控制項還有其他的處理沒有附上,具體的讀者可以進行相應細節的調整,進行完整的網路請求項目開發。
由於iOS開始,引入了新的網路介面NSURLSession,而在iOS9中NSURLConnection被宣布棄用,因此關於NSURLSession發送GET和POST請求的資料部分,有興趣的可以參考:
iOS開發 GET、POST請求方法(NSURLSession篇)
by:啊左~
⑩ 如何針對http的get請求進行處理與響應
1、HTTP請求概述
在前面有一篇文章對HTTP協議有詳細的描述,這里就不再過多的做說明,只是簡單的作為這篇文章的引子。
HTTP協議又被稱為超文本傳輸協議,它的的設計目的是保證客戶機與伺服器之間的通信。HTTP 的工作方式是客戶端與伺服器之間的請求-應答協議。在客戶端和伺服器之間進行請求-響應時,有兩個最基本的請求方式:GET 和 POST。
其中,GET請求表示從指定的資源請求數據,POST請求表示向指定的資源提交要被處理的數據。
2、HTTP請求格式
在HTTP請求中,首先是請求行,注意這里的請求行一定要放在最前面;其次,是請求頭,英文表示為header;然後會空一行,緊接著就可以是請求的具體內容了,一般稱之為請求體,request-body。給出一個圖示如下:
3、GET請求與POST請求對比
GET請求與POST請求有一些異同點,主要有以下幾點問題:
(1)、GET請求和POST請求都是客戶端與伺服器之間交互,請求--應答模式的協議
(2)、GET請求是通過URL直接請求數據,數據信息可以在URL中直接看到,比如瀏覽器訪問;而POST請求是放在請求頭中的,我們是無法直接看到的;
(3)、GET提交有數據大小的限制,一般是不超過1024個位元組,而這種說法也不完全准確,HTTP協議並沒有設定URL位元組長度的上限,而是瀏
覽器做了些處理,所以長度依據瀏覽器的不同有所不同;POST請求在HTTP協議中也沒有做說明,一般來說是沒有設置限制的,但是實際上瀏覽器也有默認
值。總體來說,少量的數據使用GET,大量的數據使用POST。
(4)、GET請求因為數據參數是暴露在URL中的,所以安全性比較低,比如密碼是不能暴露的,就不能使用GET請求;POST請求中,請求參數信息是放在請求頭的,所以安全性較高,可以使用。在實際中,涉及到登錄操作的時候,盡量使用HTTPS請求,安全性更好。
下面給出一副圖示,說明一下HTTP中GET與POST請求的差異:
4、使用步驟:
在Android中使用HTTP請求,主要步驟如下:
(1)、實例化一個HttpGet(或HttpPost)對象,將請求的URL地址通過構造方法傳給HttpGet(或HttpPost)對象;
(2)、使用DefaultHttpClient類的execute方法發送GET或POST 請求,並返回HttpResponse對象;
(3)、通過HttpResponse介面的getEntity方法返回響應信息。
5、實例代碼
給出一個在實際應用中的一個POST請求的代碼片段:
[java] view plain print?
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二個參數"));
try {
HttpPost post = new HttpPost(baseUrl);
post.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(post); //執行POST方法
resCode = response.getStatusLine().getStatusCode()); //獲取響應碼
result = EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
6、HTTP請求狀態碼意義
HTTP請求中,主要有這樣幾個類型:1XX:表示信息提示,2XX:表示成功,3XX:表示重定向,4XX:表示客戶端請求錯誤,5XX:表示伺服器錯誤。常見的幾個HTTP請求狀態碼意義如下:
200 OK: 找到了該資源,並且一切正常。
304 NOT MODIFIED: 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的緩存機制。
401 UNAUTHORIZED: 客戶端無權訪問該資源。這通常會使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到伺服器。
403 FORBIDDEN: 客戶端未能獲得授權。這通常是在401之後輸入了不正確的用戶名或密碼。
404 NOT FOUND: 在指定的位置不存在所申請的資源。
505 NOT SUPPORTED:伺服器不支持請求中所指明的HTTP版本