我计划使用PHP来满足一个简单的需求。我需要从URL下载XML内容,为此我需要向该URL发送HTTP GET请求。
PHP中怎么做呢?
http_get应该做的把戏。http_get相对于file_get_contents的优点包括能够查看HTTP报头、访问请求详细信息和控制连接超时。
http_get
file_get_contents
$response = http_get("http://www.example.com/file.xml");
除非你需要的不仅仅是文件的内容,否则你可以使用file_get_contents。
$xml = file_get_contents("http://www.example.com/file.xml");
对于更复杂的东西,我会使用旋度。
对于更高级的GET/POST请求,你可以安装CURL库(http://us3.php.net/curl):
$ch = curl_init("REMOTE XML FILE URL GOES HERE"); // such as http://example.com/example.xml curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, 0); $data = curl_exec($ch); curl_close($ch);
取决于你的php设置是否允许对url进行fopen,你也可以简单地使用字符串中的get参数(例如http://example.com?variable=value)来fopen url。
编辑:重新阅读问题,我不确定你是否希望传递变量-如果你不是,你可以简单地发送包含http://example.com/filename.xml的fopen请求-请忽略变量=值部分
我喜欢用fsockopen来做这个。
记住,如果你正在使用代理,你需要在你的php代码中做一个小技巧:
(PROXY WITHOUT AUTENTICATION EXAMPLE) <?php $aContext = array( 'http' => array( 'proxy' => 'proxy:8080', 'request_fulluri' => true, ), ); $cxContext = stream_context_create($aContext); $sFile = file_get_contents("http://www.google.com", False, $cxContext); echo $sFile; ?>
另一方面,使用服务器的REST API在PHP中非常流行。您可以假设所有url都是REST API的一部分,并使用许多设计良好的PHP包。
实际上,REST API是一种使用站点服务的方法。
因此,开发了许多PHP包来简化REST API调用。例如,这里有一个非常好的例子:
https://github.com/romanpitak/PHP-REST-Client
使用这样的包可以帮助您轻松地获取资源。
所以,获取xml文件(你提到的)是很容易的:
$client = new Client('http://example.com'); $request = $client->newRequest('/filename.xml'); $response = $request->getResponse(); echo $response->getParsedResponse();
Guzzle是一个非常著名的库,它可以非常容易地进行各种HTTP调用。看到https://github.com/guzzle/guzzle。使用composer require guzzlehttp/guzzle安装并运行composer install。下面的代码对于http get调用来说已经足够了。
composer require guzzlehttp/guzzle
composer install
$client = new \GuzzleHttp\Client(); $response = $client->get('https://example.com/path/to/resource'); echo $response->getStatusCode(); echo $response->getBody();