php 傳送POST到別的URL並取得回應內容 使用fsockopen

如果不需要傳送參數或是使用GET method傳送

可以直接使用fopen()或是file_get_contents()函式獲得回應內容
但是如果需要不經過表單就送出POST給某URL
就需要使用curl相關函式或是fsockopen()傳送
curl的用法比較簡單
可以咕狗看看(但是php必須要先安裝curl才可以用)
這邊要講的是fsockopen()

//接收POST參數的URL
$url = 'http://www.google.com';
//POST參數,在這個陣列裡,索引是name,值是value,沒有限定組數
$postdata = array('post_name'=>'post_value','acc'=>'hsin','nick'=>'joe');
//函式回覆的值就是取得的內容
$result = sendpost($url,$postdata);

function sendpost($url, $data){
//先解析url 取得的資訊可以看看http://www.php.net/parse_url
$url = parse_url($url);
$url_port = $url['port']==''?(($url['scheme']=='https')?443:80):$url['port'];
if(!$url) return "couldn't parse url";
//對要傳送的POST參數作處理
$encoded = "";
while(list($k,$v)=each($data)){
  $encoded .= ($encoded?'&':'');
  $encoded .= rawurlencode($k)."=".rawurlencode($v);
}
//開啟一個socket
$fp = fsockopen($url['host'],$url_port);
if(!$fp) return "Failed to open socket to ".$url['host'];
//header的資訊
fputs($fp,'POST '.$url['path'].($url['query']?'?'.$url['query']:'')." HTTP/1.0rn");
fputs($fp,"Host: ".$url['host']."n");
fputs($fp,"Content-type: application/x-www-form-urlencodedn");
fputs($fp,"Content-length: ".strlen($encoded)."n");
fputs($fp,"Connection: closenn");
fputs($fp,$encoded."n");
//取得回應的內容
$line = fgets($fp,1024);
if(!eregi("^HTTP/1.. 200", $line)) return;
$results = "";
$inheader = 1;
while(!feof($fp)){
  $line = fgets($fp,2048);
  if($inheader&&($line == "n" || $line == "rn")){
    $inheader = 0;
  }elseif(!$inheader){
    $results .= $line;
  }
}
fclose($fp);
return $results;
}

參考資訊:http://www.phpe.net/faq/71.shtml

本篇發表於 php 並標籤為 。將永久鏈結加入書籤。

php 傳送POST到別的URL並取得回應內容 使用fsockopen 有 6 則回應

  1. 通告: Life["Breathing"] » php 傳送get到別的URL並取得回應內容 使用fsockopen

  2. Ande 說道:

    朋友,你是台湾哪里人哦?我来自大陆。

  3. hsin 說道:

    哈囉你好~
    我是台北人~

  4. Ande 說道:

    很高兴认识你,我是哈尔滨人

  5. Ande 說道:

    关于本篇文章的内容,貌似fsockopen()在以post方法提交数据后不能够像FORM手工按SUBMIT按钮一样重定向到其他页面。
    请问朋友做什么工作的,使用什么即时通讯软件吗?

  6. hsin 說道:

    fsockopen我想就只是開socket而已囉
    要轉向的話 response回來之後 還是要用header()或是其他方式轉

    我也是作這方面的工作 網站程式
    有用msn 哈

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>