用fsockopen實現POST請求訪問騰訊API

2021-08-27 07:31:32 字數 1320 閱讀 2989

qq推薦的是curl方法,推薦的sdk裡用的也是。不過curl是php的擴充套件庫,需要另外安裝,而呼叫curl,會牽扯到curl_exec函式,這個函式允許遠端執行命令,如果伺服器不允許執行curl_exec的話,那麼用curl呼叫qq的api就是空談,這時候就需要用到別的方法來實現post請求。

fsockopen要比curl複雜一點,它是直接用fputs或fwrite寫http請求的資料流,而curl已經把所有的內容的封裝起來了。

①,第一步是鏈結到api伺服器,值得注意的是,http請求和https請求埠和寫法是不一樣的。

http的話,是:

$fp = fsockopen('http://'.$host, 80, $errno, $errstr, 20);
https的話,是:

$fp = fsockopen('ssl://'.$host, 443, $errno, $errstr, 20);
$errno如果是0的話,表示請求主機$host失敗。

因為要鏈結的是qq的api,這裡$host是"graph.qq.com", 用第二個https請求。具體的參照api文件。

②,然後是用fputs寫post請求包。用傳送微博add_t請求為例:

fputs($out);post資料報的格式有幾點需要注意

- 分行要用"\r\n",而且一定要用雙引號。

- body前面的一行,要用兩個\r\n

- qq文件裡的post請求示例上有個錯誤,connection應該是close,而不是keep alive。有興趣的可以試試keep alive,這個值在讀取返回值的時候,會讓你後悔的。

③,發完資料流,就可以用fgets或fread讀取結果了。需要注意的是,fgets是一行一行的讀取結果,而fread是按定義的長度讀取返回結果。顯然,fread要更快一點。

while(!eof($fp))
④,然後就是處理返回結果,返回結果和發出的post資料報是很像的,要的是body部分,所以,直接擷取第乙個\r\n\r\n之後的資料就對了。

php使用fsockopen實現非同步

php使用fsockopen實現非同步 parem post data post 請求引數 parem exetime 非同步任務執行時間 單位秒 parem debug 是否開啟除錯模式 function request by fsockopen url,post data array exeti...

fsockopen實現多執行緒或非同步

fsockopen函式 fsockopen 與fputs 來模擬多執行緒。格式 fsockopen hostname port errorno errorstr port 埠,一般為80 errorno 錯誤 errorstr 錯誤資訊 例 fp fsockopen localhost 80,err...

用pycharm建立POS機工程

本菜終於基本建成了pos機的第乙個頁面,使用pycharm編輯器,在django框架中進行編碼,通過css檔案編輯頁面外觀,html檔案編輯整體格式。另有jquery的js檔案編輯超連結等尚未完成。在pycharm編輯器中先設定外觀有利於保護眼睛,檔案改名或移動之後會自動對編碼內的內容進行更改,個人...