免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13382 | 回复: 8
打印 上一主题 下一主题

如何向远程服务器发送一个http的get请求? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-28 19:02 |只看该作者 |倒序浏览
比如http://xxx.xxx.xxx.xxx/aaa.php?a=1&b=2
请问如何把这个请求发送出去?不是跳转!

论坛徽章:
0
2 [报告]
发表于 2005-05-28 20:06 |只看该作者

如何向远程服务器发送一个http的get请求?

先构造POST的请求
然后用 fsockopen打开一个对方网站的端口
然后用fput把你的请求发送出去。
如果有必要用fget来接受对方的回应。

下面的代码是我的blog里的send trackping的一部分。基本上完成了上面的所有步骤。

中文注释乱码是因为我用utf8写的。你修改一下就可以用了。


[code]
$http_request .= "OST ".$trackback_url['path'].$trackback_url["query"]." HTTP/1.1\r\n" ;
                        $http_request .= 'Host: '.$trackback_url['host']."\r\n";
                        $http_request .= 'Content-Type: application/x-www-form-urlencoded.'."\r\n";
                        $http_request .= 'Content-Length: '.strlen($query_string)."\r\n";
                        $http_request .= "User-Agent: ibsblog" ;
                        $http_request .= "Connection: close\r\n\r\n";
                        $http_request .= $query_string."\r\n"; //×&&ó加上我&膓uery
                        //构渊?&迁?林·&&&
                        if ( '' == $trackback_url['port'] )
                                $trackback_url['port'] = 80;
                        //&ò&&&

论坛徽章:
0
3 [报告]
发表于 2005-05-28 20:42 |只看该作者

如何向远程服务器发送一个http的get请求?

能发个全的给偶吗!偶的邮件:masky@163.com

论坛徽章:
0
4 [报告]
发表于 2005-05-28 21:22 |只看该作者

如何向远程服务器发送一个http的get请求?

你要什么?这个函数基本上都在这里了.  实际上它是类的一个方法.我是参照wordpress里面的track back模块改写的.你可以去下一个wordpress看看,

imbiss的Trackbak类(功能尚未完整).为方便阅读,现在转为gb2312了。


  1. <?php
  2. // 这是一个trackback sender程序
  3. // 中文技术规范参照 http://hedong.3322.org/archives/000351.html
  4. // 英文参照 http://www.sixapart.com/pronet/docs/trackback_spec
  5. // 现在的问题,在url后面附加了信息以后还要在正文内添加吗?
  6. //TPP.php
  7. //TrackbackPing.php

  8. class ibs_trackback{
  9.         var $debug = true;
  10.         var $debuginfo; //用来保存debug信息
  11.         var $version = 0.1;
  12.         var $response; // save response from server

  13.         function ibs_trackback(){
  14.                 if ($this->;debug){
  15.                         $debuginfo= "<pre>;\n";
  16.                 }
  17.         }

  18.         function destory(){
  19.                 if($this->;debug){                       
  20.                         $this->;debuginfo .="</pre>;\n";
  21.                         //print($this->;debuginfo);
  22.                 }       
  23.         }

  24.         function getResponse(){
  25.                 return $this->;response;
  26.         }

  27.         function getDebuginfo(){
  28.                 return $this->;debuginfo;
  29.         }
  30.         //Sends a trackback ping to a specified trackback URL.
  31.         // 发送单个TB ping,Send a Trackback
  32.         //真正用来实现trackback功能的参数
  33.         //传入的参数
  34.         //$trackback_url: TrackBack Ping URL
  35.         //$title: your posts title
  36.         //$excerpt: your texts excerpt
  37.         //$fromurl: your posts url,an best your permalink
  38.         //$fromblogname: your blogs name
  39.         //$charst: your texts charset. Not standard, but many blog can untderstand this.
  40.         function send_trackback_ping($trackback_url, $title, $excerpt, $fromurl, $fromblogname, $charset) {                       
  41.                         $title                =        rawurlencode($title);
  42.                         $excerpt        =        rawurlencode($excerpt);               
  43.                         $blog_name        =        rawurlencode($fromblogname);                                       
  44.                         $url                =        rawurlencode($fromurl);                       
  45.                         $charset        =        rawurlencode($charset);
  46.                         $query_string = "url=".$url."&title=".$title."&blog_name=".$blog_name."&excerpt=".$excerpt;
  47.                        
  48.                         if($this->;debug){ $this->;debuginfo .= "\nQuery Stirng=".$query_string;}
  49.                         $trackback_url = parse_url($trackback_url);//把目标地址分解为数组
  50.                         //如果目标地址有?,query就是问号后面的参数。有些blog使用固定地址所以没有?
  51.                         //到底url参数是通过query传递还是post传递的呢?
  52.                         if ((isset($trackback_url["query"])) && ($trackback_url["query"] != ""))
  53.                         {        //如果有?,就有query
  54.                                 $trackback_url["query"] = "?" . $trackback_url["query"]."&".$query_string;
  55.                                 if($this->;debug){
  56.                                         $this->;debuginfo .= "\n对方的tb地址包含一个问号,在他的参数后面附加上我的blog信息,这样他的rest参数为".
  57.                                         $trackback_url["query"];
  58.                                 }
  59.                         }
  60.                         else {
  61.                                 $trackback_url["query"] = "?".$query_string;
  62.                                 if($this->;debug){
  63.                                         $this->;debuginfo .= "\n对方的tb地址不包含?,手工加上.这样他的rest参数为".
  64.                                         $trackback_url["query"];
  65.                                 }
  66.                         }
  67.                        
  68.                         //print_r($trackback_url);
  69.                         //$http_request  = 'POST ' . $trackback_url['path'] . ($trackback_url['query'] ? '?'.$trackback_url['query'] : '') . " HTTP/1.0\r\n";


  70.                         if($this->;debug){ $this->;debuginfo .= ("urlquery=".$trackback_url["query"]);  }

  71.                         $http_request .= "POST ".$trackback_url['path'].$trackback_url["query"]." HTTP/1.1\r\n" ;
  72.                         $http_request .= 'Host: '.$trackback_url['host']."\r\n";
  73.                         $http_request .= 'Content-Type: application/x-www-form-urlencoded.'."\r\n";
  74.                         $http_request .= 'Content-Length: '.strlen($query_string)."\r\n";
  75.                         $http_request .= "User-Agent: ibsblog" ;
  76.                         $http_request .= "Connection: close\r\n\r\n";
  77.                         $http_request .= $query_string."\r\n"; //最后加上我的query
  78.                         //构造请求字符串
  79.                         if ( '' == $trackback_url['port'] )
  80.                                 $trackback_url['port'] = 80;
  81.                         //打开端口
  82.                         $fs = @fsockopen($trackback_url['host'], $trackback_url['port'], $errno, $errstr, 3);
  83.                         if (!is_resource($fs)){
  84.                                 $this->;response .= "trackback_send: Couldn't connect to ".$trackback_url['host'].",Port ".$trackback_url['port'];
  85.                                 return false;
  86.                         }
  87.                         //发送请求
  88.                         fputs($fs, $http_request);
  89.                         if($this->;debug){
  90.                                 $this->;debuginfo .= "\n<b>;Your Http Request:</b>;\n".$http_request ;
  91.                         }

  92.                         //printf("http request:%s", $http_request);
  93.                         //捕获返回信息
  94.                         $i=0;
  95.                         while(!feof($fs)) {                                       
  96.                                 $this->;response .= fgets($fs, 4096);                               
  97.                                 if($i>;100){
  98.                                         printf("Error. Response is more than %s Byte!", 4096*$i);
  99.                                         return false;
  100.                                 }
  101.                                 $i++;
  102.                         }
  103.                         fclose($fs);//关闭端口
  104.                         // Did the trackback ping work
  105.                          strpos($this->;response, '<error>;0</error>;') ? $return = true : $return = false;
  106.                         // send result
  107.                         return $return;
  108.                 }

  109. }

  110. /*
  111. //test
  112. $zielurl = "http://www.yculblog.com/trackback/4/649425";//这种blog没有?在参数里
  113. $zielurl = "http://www.blogdriver.com/blog/tb.b?diaryID=658589 ";
  114. $zeilphpurl = "http://140.111.66.31/blog/trackback.php?id=2"; //测试通过 //http://140.111.66.31/blog/index.php?op=ViewArticle&articleId=2&blogId=2

  115. //$zielurl = "http://127.0.0.1/wordpress/wp-trackback.php?p=14";
  116. $myblogurl="http://www.stud.uni-karlsruhe.de/~uu5i/blog/index.php?aid=141";
  117. $myexcerpt = "借宝地测试一下";
  118. $mytitle = "test";
  119. $myblogname="test blog";
  120. $mycharset = "UTF-8";

  121. //$ping = $zielurl ."&url=".$myblogurl."&excerpt=".$myexcerpt."&title=".$mytitle."&blog_name=".$myblogname."&charset=".$mycharset."&uri=".$myblogurl;
  122. $ping = $zielurl ."&url=".$myblogurl;


  123. $mytb = new ibs_trackback;
  124. $status = false;
  125. $status=$mytb->;send_trackback_ping($zielurl, $mytitle,$myexcerpt,$myblogurl,$myblogname, $mycharset  );
  126. if($status){
  127.         print("<h1>;Sucessuful!</h1>;\n");
  128. }
  129. else{ print("<h1>;Failed!</h1>;\n");}
  130. $debug = $mytb->;getdebuginfo();
  131. $response = $mytb->;getResponse();
  132. $mytb->;destory();

  133. printf("<b>;Debug info:</b>;:\n %s\n", $debug);
  134. printf("<b>;Respons:</b>;\n%s\n", $response);


  135. /*
  136. $client = new IXR_Client($zielurl);//创建客户端
  137. $client->;timeout = 3; //设置3秒超时
  138. $client->;debug = true;
  139. $pagelinkedfrom= $zielurl;
  140. $pagelinkedto = urldecode($myblogurl);
  141. if ( !$client->;query('pingback.ping', array($pagelinkedfrom, $pagelinkedto) ) ){
  142.                                 //debug_fwrite($log, "Error.\n Fault code: ".$client->;getErrorCode()." : ".$client->;getErrorMessage()."\n");
  143.                                 $client->;getErrorMessage();
  144.                         }
  145.                         else{
  146.                                 add_ping( $post_ID, $pagelinkedto );
  147.                         }
  148. */
  149. ?>;
  150. ----------------------------------------------------------------
  151. This file is converted by NJStar Communicator - www.njstar.com
  152. ----------------------------------------------------------------
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-05-29 11:59 |只看该作者

如何向远程服务器发送一个http的get请求?

谢谢!
如果偶是从代理服务器上网的话,就是要与代理服务器连接,发命令给代理服务器,是不是这样的!

论坛徽章:
0
6 [报告]
发表于 2005-05-29 13:13 |只看该作者

如何向远程服务器发送一个http的get请求?

这么麻烦,有点复杂了,不太明白~!如果我只是想把请求发送出去让对方接收到,用
file_get_contents('http://xxx.xxx.xxx.xxx/aaa.php?a=1&b=2');
行吗?

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
7 [报告]
发表于 2005-05-29 22:53 |只看该作者

如何向远程服务器发送一个http的get请求?

你去看一看:
php的CURL模块,很简单的。

我前些日子还做了一个注册机

论坛徽章:
0
8 [报告]
发表于 2005-05-30 03:55 |只看该作者

如何向远程服务器发送一个http的get请求?

原帖由 "masky" 发表:
谢谢!
如果偶是从代理服务器上网的话,就是要与代理服务器连接,发命令给代理服务器,是不是这样的!

这里没有proxy的事。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-05-30 09:32 |只看该作者

如何向远程服务器发送一个http的get请求?

http://pear.php.net/package/HTTP_Request

有封装好的包.简单易行.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP