def headerCookie(buf): print buf def getEnterRandCode():#從12360得到登錄驗證碼 #得到登錄驗證碼圖 curl = pycurl.Curl() f = StringIO.StringIO() curl.setopt(pycurl.URL, "https://www.12306.cn/otsweb/passCodeAction.do?rand=sjrand") curl.setopt(pycurl.WRITEFUNCTION, f.write) curl.setopt(pycurl.SSL_VERIFYPEER, 0) curl.setopt(pycurl.SSL_VERIFYHOST, 0) curl.setopt(pycurl.HEADERFUNCTION, headerCookie) curl.setopt(pycurl.COOKIE,Cookie) curl.perform() backinfo = '' if curl.getinfo(pycurl.RESPONSE_CODE) == 200: backinfo = f.getvalue() curl.close() return backinfo 從上面可以得知,,pycurl鏈接的大至流程
CURLOPT_WRITEFUNCTION: 寫(下載)回傳函數(shù),傳遞一個寫指針供外部操作, 一次回調(diào)內(nèi)容大小在 CURL_MAX_WRITE_SIZE (curl.h頭文件)中設置 CURLOPT_WRITEDATA: 直接寫文件,指定一個文件名如c.setopt(pycurl.WRITEDATA, 'E:\WebSite\py\1.txt') 注win下不能用 CURLOPT_READFUNCTION: 讀(上傳)回傳函數(shù) CURLOPT_SEEKFUNCTION: 數(shù)據(jù)指針移動,int function(void *instream, curl_off_t offset, int origin);SEEK_SET, SEEK_CUR and SEEK_END,返回CURL_SEEKFUNC_OK或CURL_SEEKFUNC_FAIL或CURL_SEEKFUNC_CANTSEEK (0,1,2) CURLOPT_OPENSOCKETFUNCTION: CURLOPT_HEADERFUNCTION:只接收頭數(shù)據(jù) size_t function( void *ptr, size_t size, size_t nmemb, void *userdata); CURLOPT_DEBUGFUNCTION: int curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *); CURLOPT_VERBOSE: 參數(shù)設置為1 能顯示更多詳細信息 CURLOPT_HEADER: 設為 1 將在返回的文本中包含頭信息 CURLOPT_NOSIGNAL: 不超時 CURLOPT_FOLLOWLOCATION:設置為1告訴libcurl遵循任何訪問 CURLOPT_MAXREDIRS: 設定重定向的數(shù)目限制,設置為-1表示無限的重定向(默認) CURLOPT_PUT:數(shù)據(jù)上載相關 CURLOPT_POST: CURLOPT_POSTREDIR: CURLOPT_POSTFIELDS: CURLOPT_POSTFIELDSIZE: CURLOPT_POSTFIELDSIZE_LARGE: CURLOPT_COPYPOSTFIELDS: CURLOPT_HTTPPOST: CURLOPT_UPLOAD: CURLOPT_AUTOREFERER:libcurl自動設置Referer CURLOPT_REFERER: 偽造來源路徑 CURLOPT_USERAGENT:自定義USERAGENT CURLOPT_HTTPHEADER:自定義頭 CURLOPT_COOKIE: "name1=content1; name2=content2;" CURLOPT_COOKIEFILE: CURLOPT_COOKIEJAR: CURLOPT_COOKIESESSION: 默認情況下,libcurl始終加載和存儲所有Cookie CURLOPT_COOKIELIST CURLOPT_HTTPGET CURLOPT_HTTP_VERSION: CURL_HTTP_VERSION_NONE,CURL_HTTP_VERSION_1_0,CURL_HTTP_VERSION_1_1 CURLOPT_IGNORE_CONTENT_LENGTH:忽略內(nèi)容長度頭,針對類似Apache 1.x的服務器 CURLOPT_HTTP_TRANSFER_DECODING:告訴libcurl如何對傳輸解碼,(0,=1) CURLOPT_HTTP200ALIASES:自定義HTTP 200響應別名,有些服務器對200返回不是標準的 CURLOPT_ENCODING:設置接收的內(nèi)容編碼,同 Accept-Encoding, ('','gzip',....) CURLOPT_UNRESTRICTED_AUTH:數(shù)設置為1,繼續(xù)發(fā)送認證(用戶+密碼) NETWORK OPTIONS CURLOPT_URL: ,ftp://xxxx CURLOPT_PROXY:HTTP代理,主機名或IP地址 CURLOPT_PROXYPORT:代理端口,也可在PROXY的地址后加":端口",如 :8080 CURLOPT_PROXYTYPE:代理類型,CURLPROXY_HTTP(默認), CURLPROXY_HTTP_1_0,CURLPROXY_SOCKS4,CURLPROXY_SOCKS5,CURLPROXY_SOCKS4A,CURLPROXY_SOCKS5_HOSTNAME, CURLOPT_NOPROXY:不使用代理的域 CURLOPT_HTTPPROXYTUNNEL: CURLOPT_BUFFERSIZE: libcurl的緩沖區(qū)大?。ㄒ宰止?jié)為單位) (認證) CURLOPT_NETRC: 此參數(shù)控制你的密碼,CURL_NETRC_OPTIONAL使用 ~/.netrc 文件, CURL_NETRC_IGNORED(默認):忽略文件,CURL_NETRC_REQUIRED:告訴該文件的使用所需的庫,,要忽略的URL信息 CURLOPT_NETRC_FILE: 指定 ~/.netrc 文件 CURLOPT_USERNAME: CURLOPT_USERPWD: CURLOPT_PASSWORD: CURLOPT_PROXYUSERNAME: CURLOPT_PROXYUSERPWD: CURLOPT_HTTPAUTH: CURLOPT_PROXYAUTH:
curl.setopt(pycurl.HTTPHEADER,["x-requested-with:XMLHttpRequest", "Accept:text/plain, */*", "Referer:https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=init"]) #這是https頭 curl.setopt(pycurl.POSTFIELDS,senddata)這里是自己定義的發(fā)送數(shù)據(jù) getinfo
本文標題:python中使用pycurl抓取https鏈接 本文URL:http://www./browse/python/57971.html 版權所有:本站作品,允許轉載,轉載時請以超鏈接形式標明文章,,原始出處,,作者信息。否則將追究法律責任 |
|