為什麼curl一導入文件就關閉
『壹』 請教一個curl的問題
下面是線程函數體。
去掉了一些無關的東西,大體結構是這樣的。trace文件里有curlErrFlag = 0, 但是沒有resultCode = 的信息,說明是curl_easy_perform( )出的錯。而且負責通信的另一端的人說,命令是傳送過去並執行了的。
大牛們看看?
void slccorCurl_c::PerformCurl(const char* url,string userpwd, string xmlbuffer , string protocol )
{
try
{
CPFDEF::TraceBuffer_c trace;
trace.SetPacketLevel( 5 );
struct memoryStruct response;
response.memory=NULL;
response.size = 0;
curl_global_init(CURL_GLOBAL_ALL);
CURL *c = curl_easy_init();
if( ! c ) {
CPFDEF::Error_c err(SLCCOR_CURL_INIT_EXCEPTION,
"Error ring curl initialisation");
err.SetLocation(__FILE__, __LINE__);
CPFCEC::ErrorLog_c::Send( err );
}
int curlErrFlag = 0;
if (( curl_easy_setopt(c, CURLOPT_URL, url)) != CURLE_OK ) curlErrFlag = 1;
//...a lot of curl_easy_setopt calling
if (( curl_easy_setopt(c, CURLOPT_SSL_VERIFYHOST, 0))!= CURLE_OK ) curlErrFlag = 1;
trace << " curlErrFlag = " << curlErrFlag << endl << flush ;
if ( curlErrFlag == 1 )
{
result = SLCCOR_CURL_ERROR;
}
else
{
CURLcode resultCode = curl_easy_perform( c );
trace << " resultCode = " << resultCode << endl << flush ;
if ( resultCode == CURLE_COULDNT_CONNECT || resultCode == CURLE_COULDNT_RESOLVE_HOST )
{
result = SLCCOR_NO_NE_CONNECT ;
}
if(response.memory)
{
xmlResponse = response.memory;
}
free (response.memory);
curl_easy_cleanup( c );
}
}
catch (...) {
//...
}
}
『貳』 curl中為什麼
獲得頁面
使用命令:curl http://curl.haxx.se
這是最簡單的使用方法。用這個命令獲得了http://curl.haxx.se指向的頁面,同樣,如果這里的URL指向的是一個文件或者一幅圖都可以直接下載到本地。如果下載的是HTML文檔,那麼預設的將不顯示文件頭部,即HTML文檔的header。要全部顯示,請加參數 -i,要只顯示頭部,用參數 -I。任何時候,可以使用 -v 命令看curl是怎樣工作的,它向伺服器發送的所有命令都會顯示出來。為了斷點續傳,可以使用-r參數來指定傳輸范圍。
『叄』 curl傳文件會自動結束嗎
curl傳文件一般是不會自動結束的。
cURL是一個利用URL語法在命令行下工作的文件傳輸工具,1997年首次發行。它支持文件上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱cURL為下載工具。cURL還包含了用於程序開發的libcurl。
cURL支持的通信協議有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。
PHP cURL函數:
PHP支持的由Daniel Stenberg創建的libcurl庫允許你與各種的伺服器使用各種類型的協議進行連接和通訊。libcurl支持http、https、ftp、gopher、telnet、dict、file和ldap協議。
libcurl同時也支持HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能通過PHP的FTP擴展完成)、HTTP 基於表單的上傳、代理、cookies和用戶名+密碼的認證。
『肆』 curl不支持要怎麼解決
你先新建立一個文件phpinfo.php中寫上
1
2
3
<?php
phpinfo();
?>
然後在瀏覽器中打開phpinfo.php查找下curl是否開啟。
如果沒開啟將php.ini(c:WINDOWS目錄下)中的;extension=php_curl.dll中的分號去掉; 然後重啟apache或者IIS。
如果因為用的空間就不支持的話,請更換成
file_get_content 用這個函數去替換!
『伍』 curl 怎麼強制關閉curl
沒太明白的你的意思,你是說curl和wget命令測試你的站點,如果超時,會自動重連? 如果是這個意思的話,curl和wget是不會有你說的自動再連的,不論是超時或者是文件不存在,curl和wget都會結束,然後給你一個返回說明
『陸』 php curl 怎麼不生效
php curl 5.2 有BUG,你可以去找一個5.2.9的替換一下就可以了
『柒』 curl的用法
curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。本文介紹了它的簡單用法。
*******************************************************************************************************************************************************
curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。
它支持很多協議:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。
curl同樣支持HTTPS認證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證, HTTP上傳, 代理伺服器, cookies, 用戶名/密碼認證, 下載文件斷點續傳, 上載文件斷點續傳, http代理伺服器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理伺服器, 通過http代理伺服器上傳文件到FTP伺服器等等,功能十分強大。
Windows操作系統下的網路螞蟻,網際快車(FlashGet)的功能它都可以做到。准確的說,curl支持文件的上傳和下載,所以是一個綜合傳輸工具,但是按照傳統,用戶習慣稱curl為下載工具。
curl是瑞典curl組織開發的,您可以訪問: http://curl.haxx.se/
獲取它的源代碼和相關說明。
鑒於curl在Linux上的廣泛使用,IBM在AIX Linux Toolbox的光碟中包含了這個軟體,並且您可以訪問IBM網站:
http://www- 1.ibm.com/servers/aix/procts/aixos/linux/altlic.html 下載它。
curl的最新版本是 7.10.8,IBM網站上提供的版本為7.9.3。
在AIX下的安裝很簡單,IBM網站上下載的rpm格式的包。
在 http://curl.haxx.se/docs/,您可以下載到UNIX格式的man幫助,裡面有詳細的curl工具的使用說明。
curl的用法為:curl [options] [URL...]
其中options是下載需要的參數,大約有80多個,curl的各個功能完全是依靠這些參數完成的。
具體參數的使用,用戶可以參考curl的man幫助。
下面,本文就將結合具體的例子來說明怎樣利用curl進行下載。
1、獲得一張頁面
使用命令:curl http://curl.haxx.se
這是最簡單的使用方法。用這個命令獲得了http://curl.haxx.se指向的頁面,同樣,如果這里的URL指向的是一個文件或者一幅圖都可以直接下載到本地。如果下載的是HTML文檔,那麼預設的將不顯示文件頭部,即HTML文檔的header。要全部顯示,請加參數 -i,要只顯示頭部,用參數 -I。任何時候,可以使用 -v 命令看curl是怎樣工作的,它向伺服器發送的所有命令都會顯示出來。為了斷點續傳,可以使用-r參數來指定傳輸范圍。
2、表單(Form)的獲取
在WEB頁面設計中,form是很重要的元素。Form通常用來收集並向網站提交信息。提交信息的方法有兩種,GET方法和POST方法。先討論GET方法,例如在頁面中有這樣一段:
<form method="GET" action="junk.cgi">
<input type=text name="birthyear">
<input type=submit name=press value="OK">
</form>
那麼瀏覽器上會出現一個文本框和一個標為「OK」的按鈕。按下這個按鈕,表單就用GET方法向伺服器提交文本框的數據。
例如原始頁面是在 www.hotmail.com/when/birth.html看到的,然後您在文本框中輸入1905,然後按OK按鈕,那麼瀏覽器的URL現在應該是:「www.hotmail.com/when/junk.cgi?birthyear=1905&;press=OK」
對於這種網頁,curl可以直接處理,例如想獲取上面的網頁,只要輸入:
curl "www.hotmail.com/when/junk.cgi?birthyear=1905&;press=OK"
就可以了。
表單用來提交信息的第二種方法叫做POST方法,POST方法和GET方法的區別在於GET方法使用的時候,瀏覽器中會產生目標URL,而POST不會。類似GET,這里有一個網頁:
<form method="POST" action="junk.cgi">
<input type=text name="birthyear">
<input type=submit name=press value="OK">
</form>
瀏覽器上也會出現一個文本框和一個標為「OK」的按鈕。按下這個按鈕,表單用POST方法向伺服器提交數據。
這時的URL是看不到的,因此需要使用特殊的方法來抓取這個頁面:
curl -d "birthyear=1905&press=OK" www.hotmail.com/when/junk.cgi
這個命令就可以做到。
1995年年末,RFC 1867定義了一種新的POST方法,用來上傳文件。主要用於把本地文件上傳到伺服器。此時頁面是這樣寫的:
<form method="POST" enctype='multipart/form-data' action="upload.cgi">
<input type=file name=upload>
<input type=submit name=press value="OK">
</form>
對於這種頁面,curl的用法不同:
curl -F upload=@localfilename -F press=OK URL
這個命令的實質是將本地的文件用POST上傳到伺服器。
有關POST還有不少用法,用戶可以自己摸索。
3、使用PUT方法。
HTTP協議文件上傳的標准方法是使用PUT,此時curl命令使用-T參數:
curl -T uploadfile www.uploadhttp.com/receive.cgi
4、有關認證。
curl可以處理各種情況的認證頁面,例如下載用戶名/密碼認證方式的頁面(在IE中通常是出現一個輸入用戶名和密碼的輸入框):
curl -u name:password www.secrets.com
如果網路是通過http代理伺服器出去的,而代理伺服器需要用戶名和密碼,那麼輸入:
curl -U proxyuser:proxypassword http://curl.haxx.se
任何需要輸入用戶名和密碼的時候,只在參數中指定用戶名而空著密碼,curl可以互動式的讓用戶輸入密碼。
5、引用。
有些網路資源訪問的時候必須經過另外一個網路地址跳轉過去,這用術語來說是:referer,引用。
對於這種地址的資源,curl也可以下載:
curl -e http://curl.haxx.se daniel.haxx.se
6、指定用戶客戶端。
有些網路資源首先需要判斷用戶使用的是什麼瀏覽器,符合標准了才能夠下載或者瀏覽。
此時curl可以把自己「偽裝」成任何其他瀏覽器:
curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" URL
這個指令表示curl偽裝成了IE5.0,用戶平台是Windows 2000。(對方伺服器是根據這個字串來判斷客戶端的類型的,所以即使使用AIX也無所謂)。
使用:
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" URL
此時curl變成了Netscape,運行在PIII平台的Linux上了。
7、COOKIES
Cookie是伺服器經常使用的一種記憶客戶信息的方法。如果cookie被記錄在了文件中,那麼使用命令:
curl -b stored_cookies_in_file www.cookiesite.com
curl可以根據舊的cookie寫出新cookie並發送到網站:
curl -b cookies.txt -c newcookies.txt www.cookiesite.com
8、加密的HTTP——HTTPS。
如果是通過OpenSSL加密的https協議傳輸的網頁,curl可以直接訪問:
curl https://that.secure.server.com
9、http認證。
如果是採用證書認證的http地址,證書在本地,那麼curl這樣使用:
curl -E mycert.pem https://that.secure.server.com
參考讀物和注意事項:
curl非常博大,用戶要想使用好這個工具,除了詳細學習參數之外,還需要深刻理解http的各種協議與URL的各個語法。
這里推薦幾個讀物:
RFC 2616 HTTP協議語法的定義。
RFC 2396 URL語法的定義。
RFC 2109 Cookie是怎樣工作的。
RFC 1867 HTTP如何POST,以及POST的格式。
文字
curl是免費軟體,IBM公司對curl不提供技術支持。
curl官方網站:
http://curl.haxx.se
『捌』 curl 無法安裝 Fatal error: Call to undefined function curl_init() 我的php文件始終無法運行curl
可能是你的php.ini沒有放到系統可以識別的目錄吧。
你用php -m 默認使用的應該是跟php.exe在同一個目錄的那個php.ini 而Windows下iis默認會去 c:\windows 下面找 你可以嘗試拷貝php.ini 到windows目錄
『玖』 curl:怎麼解決
如果你的系統提示「沒有找到libcurl.dll」或者「缺少libcurl.dll」等類似錯誤信息。
下載libcurl.dll到電腦。libcurl.dll使用方法:
一、直接拷貝該文件到系統C:WindowsSystem32目錄下。
二、然後打開「開始-運行-輸入regsvr32libcurl.dll」,回車即可解決錯誤提示。
三、注意區分32位還是64位,要與系統位數對應。
『拾』 為啥curl或file
因為,PHP CURL庫默認1024位元組的長度不等待數據的返回,所以你那段代碼需增加一項配置: curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); 給你一個更全面的封裝方法: function req_curl($url, &$status = null, $options = array())