如何从PHP发送GET请求?

Vee*_*era 264 php get http

我打算使用PHP来满足一个简单的要求.我需要从URL下载XML内容,我需要向该URL发送HTTP GET请求.

我如何在PHP中执行此操作?

Sas*_*gov 358

除非您需要的不仅仅是文件的内容,否则您可以使用file_get_contents.

$xml = file_get_contents("http://www.example.com/file.xml");
Run Code Online (Sandbox Code Playgroud)

对于任何更复杂的东西,我都会使用cURL.

  • @ShivanRaptor:我不确定你在谈论什么...查询字符串只是字符串的一部分.服务器没有理由忽略它.现在,显然,`file_get_contents`不允许您使用自定义Cookie,标头和浏览器通常会发送的其他内容来发出请求,因此您可能无法获得所需的响应.在这种情况下,无论如何你最好还是使用CURL.(但这不是OP的情况.) (26认同)
  • 这是正确的,除非您需要使用查询字符串参数. (3认同)
  • @musicfreak:查询字符串有时会被某些服务器忽略以进行安全设置。同样,跨服务器查询可能会导致以下错误:“无法打开流:HTTP请求失败!” (2认同)
  • @Sasha - 我在很多生产环境中遇到过这种情况,但你现在可以看到这些链接:http://haltiko.blogspot.com/2013/02/curl-or-filegetcontents-what-is-more.html或http: //mdb9.wordpress.com/2011/03/06/file_get_contents-vs-curl-what-has-better-performance/ (2认同)

Jam*_*ore 130

对于更高级的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);
Run Code Online (Sandbox Code Playgroud)

  • 虽然确实没有必要将CURL用于"简单要求",+ 1,因为它确实是在PHP中使用HTTP请求做更高级的任何事情的最佳解决方案. (10认同)

Wil*_*del 63

http_get应该做的伎俩.http_getover 的优点file_get_contents包括查看HTTP标头,访问请求详细信息和控制连接超时的功能.

$response = http_get("http://www.example.com/file.xml");
Run Code Online (Sandbox Code Playgroud)

  • http扩展不与PHP捆绑在一起,通常在共享主机中不可用. (82认同)
  • 这需要pecl_http> = 0.1.0,默认情况下不安装. (27认同)
  • *"您正在寻找的手册页(http://us2.php.net/manual/en/function.http-get.php)目前无法在此服务器上使用."* (3认同)

小智 20

请记住,如果您使用代理,则需要在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;
?>
Run Code Online (Sandbox Code Playgroud)


Zxa*_*aos 9

根据您的php设置是否允许对URL进行fopen,您还可以使用字符串中的get参数(例如http://example.com?variable=value)简单地打开url

编辑:重新阅读问题我不确定你是否想要传递变量 - 如果你不是,你可以简单地发送包含http://example.com/filename.xml的fopen请求- 随意忽略变量=值部分


小智 7

Guzzle 是一个非常有名的库,它使得执行各种 HTTP 调用变得非常容易。请参阅https://github.com/guzzle/guzzle。安装composer require guzzlehttp/guzzle并运行composer install。现在下面的代码足以进行 http get 调用。

$client = new \GuzzleHttp\Client();
$response = $client->get('https://example.com/path/to/resource');

echo $response->getStatusCode();
echo $response->getBody();
Run Code Online (Sandbox Code Playgroud)


pbr*_*ach 5

我喜欢使用fsockopen打开它.


Mos*_*afa 5

另一方面,使用其他服务器的REST API在PHP中非常流行.假设您正在寻找一种方法将一些HTTP请求重定向到另一台服务器(例如获取xml文件).这是一个PHP包,可以帮助您:

https://github.com/romanpitak/PHP-REST-Client
Run Code Online (Sandbox Code Playgroud)

所以,获取xml文件:

$client = new Client('http://example.com');
$request = $client->newRequest('/filename.xml');
$response = $request->getResponse();
echo $response->getParsedResponse();
Run Code Online (Sandbox Code Playgroud)