使用php代理时的空白问题

时间:2010-05-20 07:11:04

标签: php proxy

我正在使用一个php网络代理,我的网址已经编码,并且在%20之后有任何文字后,一直收到格式错误的请求错误。知道为什么会这样吗?我正在使用的Web代理代码只是我从雅虎服务中获取的一个示例:

<?php
// PHP Proxy example for Yahoo! Web services. 
// Responds to both HTTP GET and POST requests
//
// Author: Jason Levitt
// December 7th, 2005
//

// Allowed hostname (api.local and api.travel are also possible here)
define ('HOSTNAME', 'http://search.yahooapis.com/');

// Get the REST call path from the AJAX application
// Is it a POST or a GET?
$path = ($_POST['yws_path']) ? $_POST['yws_path'] : $_GET['yws_path'];
$url = HOSTNAME.$path;

// Open the Curl session
$session = curl_init($url);

// If it's a POST, put the POST data in the body
if ($_POST['yws_path']) {
 $postvars = '';
 while ($element = current($_POST)) {
  $postvars .= urlencode(key($_POST)).'='.urlencode($element).'&';
  next($_POST);
 }
 curl_setopt ($session, CURLOPT_POST, true);
 curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars);
}

// Don't return HTTP headers. Do return the contents of the call
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

// Make the call
$xml = curl_exec($session);

// The web service returns XML. Set the Content-Type appropriately
//header("Content-Type: text/xml");

echo $xml;
curl_close($session);

?>

1 个答案:

答案 0 :(得分:0)

原来问题是我需要在我的url中对包含可能需要url编码的字符的参数进行url编码,例如空格。 yws_path的值已经被url编码,但我认为这必须由代理解码然后沿http请求发送。如果没有对我需要空格的部分进行双重编码,我的请求就不会与%20一起传递,而只会传递一个空格(实际上会导致http请求未正确地进行网址编码)。