因為本人對web機制了解較少,在使用c/libcurl中遇到了很多問題。主要的解決方式:
1,在網頁原始碼中找到提交form的定位。也就是網頁檔案對應form中的action屬性。往往都是提交到jsp或者php等指令碼中執行的,而不是直接提交到本網頁。
2,要注意http頭。http頭的不同會引起網頁的不同反應。我做的乙個小專案,在提交到兩個**php指令碼時,都因為http頭引起php指令碼執行不正確。
3,重定向問題。
在一些網頁中,返回的網頁資料會帶有重定向資訊,這時要開啟curl_easy_setopt(curl, curlopt_followlocation, true);
以我目前掌握的,這個引數會自動跟蹤http頭中的重定向。這裡之所以要開啟,是因為重定向有乙個超時引數,如果未能鏈結,
也會導致網頁執行出現問題。
4,關於https,在編譯libcurl的時候要加入openssl的支援。
5,在**中加入curl_easy_setopt(curl, curlopt_verbose, 1l);可以追蹤資料的傳輸狀態。
6,如果還是解決不了,使用fiddler抓包。相比wireshark,fiddler抓取https的包更加方便和快捷。
7,不要太懶,在接收位元組流的時候用string之類的容器。老老實實用char *或者byte *。
最後再強調一下第六條:fiddler可以更方便地抓https,通過比對包的不同可以輕鬆解決碰到的各種問題。
如果您抓包之後還是無法正常獲取資料的話,最後的解決方案是:
curl_easy_setopt(m_curl, curlopt_tcp_keepalive, 1l);
我在post乙個**的時候出現了這個問題,一樣的包瀏覽器能獲取到結果而libcurl不能。猜想深層次原因的話,應該是沒有回覆keeplive包導致的伺服器認為連線已斷開導致不會向本地傳送資料。但**的後台**與伺服器配置已經不能知曉了....
使用libcurl提交POST請求
最近在學習libcurl,並利用它提交post請求,可是返回的響應總是無從驗證該次post請求是否成功提交了。1.先看下根據firebug提交的一次成功的請求,這裡以login我喜歡上的xiami為例,嘻嘻 1.1 本次post請求的http互動 1.3 經server端redirect的get 2...
Button按鈕為什麼無緣無故會提交form表單?
我的form表單裡有好幾個button按鈕,每個按鈕有不同的功能,可是這些按鈕居然都有提交功能,真是把我驚呆了 收藏 這個問題困惑了我好幾天一直百思不得其解,然後我就去查了一下button按鈕的屬性,才發現原來是因為我沒有指定button按鈕的type屬性值,type有三個可選屬性 button,s...
curl模擬提交
header content type text html charset utf8 初始化curl ch curl init print r ch 設定curl引數 curl setopt ch,curlopt url,設定url路徑 curl setopt ch,curlopt returntr...