国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【web開發】php服務端提交post請求

AndroidTraveler / 680人閱讀

摘要:參見請求分析推測可能是對方服務器不接受這樣的吧或者對的不兼容

服務端常見的post提交有三種方式,這里主要記錄curl方式

1、服務端進行http-post的三種方法 1.1 通過curl函數
function post($url, $post_data = "", $timeout = 5){//curl
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    if($post_data != ""){
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    }
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $file_contents = curl_exec($ch);
    curl_close($ch);
    return $file_contents;
}
1.2 通過Filesystem函數
function post2($url, $data)
{
    $postdata = http_build_query(
        $data
    );
    $opts = array(
        "http" => array(
                  "method"  => "POST",
                  "header"  => "Content-type: application/x-www-form-urlencoded",
                  "content" => $postdata
                ),
    );
    $context = stream_context_create($opts);

    $result = file_get_contents($url, false, $context);
 
    return $result;
}
1.3 借助網絡函數
fsockopen();
fwrite();
fread();
fclose();

以上三種方法源碼參考自:原文

2、我本地構造的curl成功提交post 2.1 curl提交post源碼
    /**
     * [sendPostHttp]
     * @param  string  $url     提交地址,[schema://host:port]
     * @param  array   $params  需要通過post提交的數據
     * @param  integer $timeout 連接超時
     * @return mixed            提交狀態
     */
    static public function sendPostHttp($url, $params, $timeout = 5)
    {
        // 構造post提交
        $ch = curl_init();
        $option = array(
            CURLOPT_URL         =>      $url,
            CURLOPT_CONNECTTIMEOUT      =>  $timeout,
            CURLOPT_SSL_VERIFYPEER      =>  false,
            CURLOPT_SSL_VERIFYHOST      =>  false,

            CURLOPT_HEADER      =>   false,
            CURLOPT_POST        =>   true,
            CURLOPT_POSTFIELDS  =>   http_build_query($params),
            CURLOPT_RETURNTRANSFER  =>  true,      
        );
        curl_setopt_array($ch, $option);

        // 提交post
        $ret = curl_exec($ch);
        if (false == $ret) {
            echo curl_error($ch);
        }

        curl_close($ch);
        return $ret;
    }
2.2 構造請求中遇到的坑

1、構造過程中參考了php手冊中的curl_setopt

所以首次嘗試時,CURLOPT_POSTFIELDS的值用了數組:
CURLOPT_POSTFIELDS => $params
結果總是返回錯誤信息:
Recv failure: Connection was reset
2、為什么會出現這樣的錯誤呢?
我們注意到CURLOPT_POSTFIELDS說明中如果value是數組,
Content-Type頭將會被設置成multipart/form-data
猜測原因就出在CURLOPT_POSTFIELDS的值上邊,所以將其傳值改為CURLOPT_POSTFIELDS => http_build_query($params),果然success!
參考:http_build_query構造請求字符串

2.3 未解的疑問

但是,為什么CURLOPT_POSTFIELDS會產生這樣影響呢?查了一下multipart/form-data,但是沒有得到具體原因。參見multipart/form-data請求分析

推測可能是對方服務器不接受這樣的Content-Type吧?
或者對multipart/form-data的不兼容?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21927.html

相關文章

  • HTTP contentType

    摘要:規范把請求分為三個部分狀態行請求頭消息主體。消息主體最后以標示結束。格式支持比鍵值對復雜得多的結構化數據,這一點也很有用。例如下面這段代碼最終發送的請求是這種方案,可以方便的提交復雜的結構化數據,特別適合的接口。 Content-Type HTTP 協議是以 ASCII 碼傳輸,建立在 TCP/IP 協議之上的應用層規范。規范把 HTTP 請求分為三個部分:狀態行、請求頭、消息主體。類...

    beita 評論0 收藏0
  • ajax概述

    摘要:換一臺電腦就要重新安裝。并且還需要適配不同的系統。提交大小幾乎沒有限制。即協議主要由請求和響應組成。相反則為同步按照程序的順序,依次往下執行,必須等上一程序執行完成之后才能執行下一程序,阻礙程序的執行。 Ajax 服務器 類型 按照服務類型:文件服務器,數據庫服務器,郵件服務器,Web服務器 按照操作系統:Linux服務器,Windows服務器 按照應用軟件:Apache服務器,Ng...

    Achilles 評論0 收藏0
  • JS基礎篇--JS之表單提交時編碼類型enctype詳解

    摘要:格式支持比鍵值對復雜得多的結構化數據,這一點也很有用。例如下面這段代碼最終發送的請求是這種方案,可以方便的提交復雜的結構化數據,特別適合的接口。 簡介 form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認為application/x-www-form-urlencoded。 ...

    ad6623 評論0 收藏0
  • JavaScript 進階知識 - Ajax篇

    摘要:注意事項以下版本要設置默認編碼,,否則程序可能無法正確顯示中文。組成部分協議是對請求和響應的報文內容進行了約束和規范。請求報文請求是由客戶端發起,其規范格式為請求行請求頭請求主體。 showImg(https://segmentfault.com/img/remote/1460000013696283?w=1920&h=1080); Ajax 前言 前面我們已經學習了js基礎知識和一些...

    Dongjie_Liu 評論0 收藏0

發表評論

0條評論

AndroidTraveler

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<