㈠ 用winsock實現http的get()
hostent * remoteHost;//hostnet是什麼類型?
就是gethostbyname返回的類型,因為一個域名可能對應多個地址還有可能是不同類型的,所以需要一個比較復雜一點的返回類型
SendString(sock,"User-Agent: Mozilla/4.0"); 告訴伺服器你是什麼,這行基本上就是欺騙伺服器說你是Netscape或者Firefox... 不過伺服器一般不會理你這個
LPSTR 就是char *。chars是在計算你已經看了多少個字,雖然是囫圇個recv進來的,解析還是得一個字一個字解析。
㈡ 如何針對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版本
㈢ java 發送http get請求 有幾種實現方式
HttpUrlConnection
HttpClient
㈣ 如何使用libcurl實現HTTP的GET方法獲取文件長度
在項目中,需要做一個下載中間件,查看資料發現libcurl很適合,因此選用libcurl來實現HTTP下載功能。
用libcurl實現下載功能很方便,只要調用libcurl庫的
在CODE上查看代碼片派生到我的代碼片
curl_easy_init()
curl_easy_setopt()
curl_easy_perform()
curl_easy_getinfo()
就可以完成http下載,並且libcurl教程很多,網上資料也很多。
對於libcurl獲取文件長度,網上比較多的做法如下:
在CODE上查看代碼片派生到我的代碼片
long downloadFileLenth = 0;
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_HEADER, 1); //只要求header頭
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
if (curl_easy_perform(handle) == CURLE_OK)
{
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
}
else {
downloadFileLenth = -1;
}
curl_easy_cleanup(handle);
但是這種做法,默認是通過HTTP的HEAD方式來獲取的,但是並不是所有HTTP的伺服器都是支持HEAD方式來獲取,比如說本人項目中,
有個HTTP server就不支持HEAD方式,而只能使用GET方式來獲取文件長度,所以這種方式不可行, 本希望能夠使用如下代碼段來實現:
在CODE上查看代碼片派生到我的代碼片
long downloadFileLenth = 0;
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_HTTPGET, 1); //使用HTTPGET
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
if (curl_easy_perform(handle) == CURLE_OK)
{
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
}
else {
downloadFileLenth = -1;
}
curl_easy_cleanup(handle);
但是發現還是用的HEAD方式獲取,查看libcurl源代碼發現,當設置CURLOPT_NOBODY,libcurl會默認設置獲取方式為HEAD方式,如果把
set nobody的option去掉,又會下載文件內容!所以上面代碼無法滿足。
沒辦法只能看libcurl源代碼,終於發現如下解決方案:
在CODE上查看代碼片派生到我的代碼片
long downloadFileLenth = 0;
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url);
curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, 「GET」); //使用CURLOPT_CUSTOMREQUEST
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
if (curl_easy_perform(handle) == CURLE_OK)
{
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
}
else {
downloadFileLenth = -1;
}
curl_easy_cleanup(handle);
可以完美解決用GET獲取文件長度,而不下載文件內容。
㈤ shell腳本實現執行http的一個post或者get方法是怎麼實現的吖
你好,可以通過curl和wget兩個命令發送http請求:
一、get請求:
1、使用curl命令:
curl 「http://www..com」 如果這里的URL指向的是一個文件或者一幅圖都可以直接下載到本地
curl -i 「http://www..com」 顯示全部信息
curl -l 「http://www..com」 只顯示頭部信息
curl -v 「http://www..com」 顯示get請求全過程解析
2、使用wget命令:
wget 「http://www..com」也可以
二、post請求
1、使用curl命令(通過-d參數,把訪問參數放在裡面):
curl -d 「param1=value1¶m2=value2」 「http://www..com」
2、使用wget命令:(--post-data參數來實現)
wget --post-data 『user=foo&password=bar』 http://www..com
以上就是Linux模擬Http的get或post請求的方法了,這樣一來Linux系統也能向遠程伺服器發送消息了。
示例:wget --post-data="" http://mcs-inner.99bill.com/mcs-gateway/mcs/task/clear
三、curl (可直接發送格式化請求例如json)
示例:目標url:http://fsc-inner.99bill.com/acs/deposit/{srcRef}
命令:curl -H "Content-type: application/json" -X POST -d '{"srcRef":"1002"}'http://fsc-inner.99bill.com/acs/deposit/1002
㈥ 怎麼發送HTTP get請求
請參照下面的例子:
/*URL可以隨意改*/
String uriAPI = "http://192.168.1.100:8080/test/test.jsp?u=wangyi&p=456";
/*建立HTTP Get對象*/
HttpGet httpRequest = new HttpGet(uriAPI);
try
{
/*發送請求並等待響應*/
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
/*若狀態碼為200 ok*/
if(httpResponse.getStatusLine().getStatusCode() == 200)
{
/*讀*/
String strResult = EntityUtils.toString(httpResponse.getEntity());
/*去沒有用的字元*/
strResult = eregi_replace("( | | | )","",strResult);
mTextView1.setText(strResult);
}
else
{
mTextView1.setText("Error Response: "+httpResponse.getStatusLine().toString());
}
}
catch (ClientProtocolException e)
{
mTextView1.setText(e.getMessage().toString());
e.printStackTrace();
}
catch (IOException e)
{
mTextView1.setText(e.getMessage().toString());
e.printStackTrace();
}
catch (Exception e)
{
mTextView1.setText(e.getMessage().toString());
e.printStackTrace();
}
㈦ 利用多線程實現一個簡單的支持get方式的http伺服器 求求大哥大姐一定幫忙啊。一定快點幫忙啊
Option Explicit
Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Public Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Public id As Long
Public Function AddText()
Do
Form1.Text1.Text = "Adding to Text1 - "
doevents
Loop
End Function
Option Explicit
Private Sub Command1_Click()
id = CreateThread(ByVal 0&, ByVal 0&, AddressOf AddText, ByVal 0&, 0, id)
End Sub
Private Sub Command2_Click()
Call TerminateThread(id, ByVal 0&)
End Sub
//PS 請注意裡面所用到的控制項...
我可以幫助你,你先設置我最佳答案後,我網路Hii教你。你的串號我已經記下,採納後我會幫你製作
㈧ 請簡單介紹http請求的get方法和post方法各有什麼優缺點
1、GET允許提交的數據大小比POST要小得多,這個大小與瀏覽器和伺服器有關,GET大概只能提交1KB;POST允許提交的數據大小隻與伺服器有關,默認可以提交2MB,也可以通過設置伺服器來改變這個值。
2、POST的安全性要比GET的安全性高一點點。主要表現為GET傳遞的信息直接顯示在url中,而POST傳遞的信息在後台進行,但是也可以利用軟體獲取到。
㈨ HTTP的GET請求方法
AUTO_ZOOM 模式下,顯示的圖像大小自動適應控制項窗口大小。
AUTO_SIZE 模式下,這個控制項的尺寸等於圖像尺寸乘以縮放因子。