多年裝潢經驗,專針對住家裝潢、住家規劃裝潢
專業諮詢為您打造完美居住空間!
壁紙專賣專業施工、完善保固、為您解決居家/辦公大樓漏水
壁癌、外牆防水隔熱問題

首頁  •  j2h 論壇 • 程式設計討論     • 

[php] curl 幕後以POST方式送出資料, 取得回應

房東:James
發表時間:2015-12-06


使用範例:

function my_curl($url,$post)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
curl_close ($ch);
return $result;
}

$postUrl='http://www.i2yes.com.tw';
$postBODY = array(
'name' => 'JACK',
'age' => '20',
'phone' => '0968123456',
'address' => '台灣'
);

$getBody = my_curl($postUrl,$postBODY);



  • 贊助網站       

    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務
    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!

  • 1 樓住戶:jack
    發表時間:2015-12-07

    類似於dreamhost這類主機服務商,是顯示fopen的使用的。使用php的curl可以實現支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL證書、HTTP POST、HTTP PUT 、FTP 上傳,kerberos、基於HTT格式的上傳、代理、cookie、用戶+口令證明、文件傳送恢復、http代理通道就最常用的來說,是基於http的 get和post方法。

    一、http的get實現
    php代碼
    $ch = curl_init("http://www.domain.com/api/index.php?test=1") ;
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 獲取數據返回
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在啟用 CURLOPT_RETURNTRANSFER 時候將獲取數據返回
    echo $output = curl_exec($ch) ;

    /* 寫入文件 */
    $fh = fopen("out.html", w) ;
    fwrite($fh, $output) ;
    fclose($fh) ;

    $ch = curl_init("http://www.domain.com/api/index.php?test=1") ;
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 獲取數據返回
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在啟用 CURLOPT_RETURNTRANSFER 時候將獲取數據返回
    echo $output = curl_exec($ch) ;

    /* 寫入文件 */
    $fh = fopen("out.html", w) ;
    fwrite($fh, $output) ;
    fclose($fh) ;
    ?>

    $url = http://www.domain.com/api/ ;
    $fields = array(
    lname=>justcoding ,
    fname=>phplover ,
    title=>myapi,
    age=>27 ,
    email=>[email protected] ,
    phone=>1353777303
    );
    //$post_data = implode(&,$fields);
    //open connection
    $ch = curl_init() ;
    //set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL,$url) ;
    curl_setopt($ch, CURLOPT_POST,count($fields)) ; // 啟用時會發送一個常規的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。
    curl_setopt($ch, CURLOPT_POSTFIELDS,$fields); // 在HTTP中的"POST"操作。如果要傳送一個文件,需要一個@開頭的文件名

    ob_start();
    curl_exec($ch);
    $result = ob_get_contents() ;
    ob_end_clean();

    echo $result;
    //close connection
    curl_close($ch) ;
    ?>

    Php代碼
    if($_GET[test])
    {
    print_r($_GET);
    }

    if($_POST)
    {
    print_r($_POST);
    }
    ?>
    if($_GET[test])
    {
    print_r($_GET);
    }
    if($_POST)
    {
    print_r($_POST);
    }
    ?>

    二、http的post實現
    Php代碼
    $url = http://www.domain.com/api/ ;
    $fields = array(
    lname=>justcoding ,
    fname=>phplover ,
    title=>myapi,
    age=>27 ,
    email=>[email protected] ,
    phone=>1353777303
    );
    //$post_data = implode(&,$fields);
    //open connection
    $ch = curl_init() ;
    //set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL,$url) ;
    curl_setopt($ch, CURLOPT_POST,count($fields)) ; // 啟用時會發送一個常規的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。
    curl_setopt($ch, CURLOPT_POSTFIELDS,$fields); // 在HTTP中的"POST"操作。如果要傳送一個文件,需要一個@開頭的文件名
    ob_start();
    curl_exec($ch);
    $result = ob_get_contents() ;
    ob_end_clean();
    echo $result;
    //close connection
    curl_close($ch) ;
    ?>

    三. php的curl傳送cookie
    兩種方式:
    一種是自動:
    Php代碼
    curl_setopt($curlHandle, CURLOPT_COOKIEJAR, cookie.txt ); //保存
    curl_setopt($curlHandle, CURLOPT_COOKIEFILE, cookie.txt ); //讀取
    curl_setopt($curlHandle, CURLOPT_COOKIEJAR, cookie.txt ); //保存
    curl_setopt($curlHandle, CURLOPT_COOKIEFILE, cookie.txt ); //讀取
    ?>
    這樣COOKIE會自動跟上去.
    不過要分兩次,一是先訪問產生cookie,接著連結才能用cookie

    例子:Php代碼
    function get_curlcuconent2($filename,$referer)
    {
    $cookie_jar = tempnam(./tmp,JSESSIONID);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $filename);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    //設置文件讀取並提交的cookie路徑
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
    $filecontent=curl_exec($ch);
    curl_close($ch);

    $ch = curl_init();
    $hostname ="www.domain.com";
    //$referer="http://www.domain.com/";
    curl_setopt($ch, CURLOPT_URL, $filename);
    curl_setopt($ch, CURLOPT_REFERER, $referer); // 看這裡,你也可以說你從google來
    curl_setopt($ch, CURLOPT_USERAGENT, "www.domain.com");

    //$request = "JSESSIONID=abc6szw15ozvZ_PU9b-8r"; //設置POST參數
    //curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    // 上面這句,當然你可以說你是baidu,改掉這裡的值就ok了,可以實現小偷的功能,$_SERVER[HTTP_USER_AGENT]
    //你也可以自己做個 spider 了,那麼就偽裝這裡的 CURLOPT_USERAGENT 吧
    //如果你要把這個程序放到linux上用php -q執行那也要寫出具體的$_SERVER[HTTP_USER_AGENT],偽造的也可以
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     

    2 樓住戶:jack
    發表時間:2015-12-07

    CULR的使用方法(POST)


    // 建立CURL連線
    $ch = curl_init();

    // 設定擷取的URL網址
    curl_setopt($ch, CURLOPT_URL, "http://localhost/SamplePath?SomeVar=test");

    //強制轉為UTF-8
    curl_setopt($ch,CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded; charset=utf-8"));

    //將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

    //設定要傳的 變數A=值A & 變數B=值B (中間要用&符號串接)
    $PostData = "a=abc&b=def";

    //設定CURLOPT_POST 為 1或true,表示要用POST方式傳遞
    curl_setopt($ch, CURLOPT_POST, 1);
    //CURLOPT_POSTFIELDS 後面則是要傳接的POST資料。
    curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData);

    // 執行
    $temp=curl_exec($ch);

    // 關閉CURL連線
    curl_close($ch)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // 建立CURL連線
    $ch = curl_init();

    // 設定擷取的URL網址
    curl_setopt($ch, CURLOPT_URL, "http://localhost/SamplePath?SomeVar=test");

    //強制轉為UTF-8
    curl_setopt($ch,CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded; charset=utf-8"));

    //將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

    //設定要傳的 變數A=值A & 變數B=值B (中間要用&符號串接)
    $PostData = "a=abc&b=def";

    //設定CURLOPT_POST 為 1或true,表示要用POST方式傳遞
    curl_setopt($ch, CURLOPT_POST, 1);
    //CURLOPT_POSTFIELDS 後面則是要傳接的POST資料。
    curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData);

    // 執行
    $temp=curl_exec($ch);

    // 關閉CURL連線
    curl_close($ch)
    以上參考:http://expect7.pixnet.net/blog/post/36428081-%5B%E7%A8%8B%E5%BC%8F%5D%5Bphp%5D-%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8php-curl%EF%BC%8C%E5%9F%BA%E7%A4%8E%E6%95%99%E5%AD%B8%E3%80%82

    另外要存取的網址如果是有SSL協定的,請加上這2個


    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
    1
    2
    3
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);

    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
    即可跳過驗證網站



     共 571 人回應  選擇頁數 【第1 頁】 【第2 頁】 【第3 頁】 【第4 頁】 【第5 頁】 【第6 頁】 【第7 頁】 【第8 頁】 【第9 頁】 【第10 頁】 【第11 頁】 【第12 頁】 【第13 頁】 【第14 頁】 【第15 頁】 【第16 頁】 【第17 頁】 【第18 頁】 【第19 頁】 【第20 頁】 

    姓名:
    佈告內容:
    其他選項: