将带有file_get_contents的User-Agent字符串传递给Discogs API失败

时间:2018-04-12 20:34:06

标签: php file-get-contents user-agent

尝试从Discogs API检索一些信息,但我得到了错误请求"每次我以编程方式点击它。

如果我在浏览器中运行相同的URL,它可以正常工作,但由于它们需要在请求中指定User-Agent字符串,这会导致file_get_contents可以理解地抛出此错误。

所以我已经编写了一个我认为可以处理的功能,如下所示,但我仍然得到了#34; Bad Request"错误:

$consumer_key = getenv('DISCOGS_CONSUMER_KEY');
$secret_key   = getenv('DISCOGS_CONSUMER_SECRET');
$options      = array('http' => array('user_agent' => 'Example/alpha +https://example.com'));
$context      = stream_context_create($options);
$results      = file_get_contents('https://api.discogs.com/database/search?q='.$term.'&key='.$consumer_key.'&secret='.$secret_key.'&per_page=10', false, $context);

我这样做错了吗?

如何在发出file_get_contents请求时指定用户代理?

修改

我刚刚使用cURL尝试过此操作,而且我得到完全相同的400响应:

$url = 'https://api.discogs.com/database/search?q='.$term.'&key='.$consumer_key.'&secret='.$secret_key.'&per_page=10';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Example/alpha +https://example.com');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close ($ch);
die($output); // 400 "Bad Request"

这些人雇用什么伏都教?

1 个答案:

答案 0 :(得分:0)

经过多次搞乱我终于破解了它,你必须在CURLOPT_ENCODING中指定你的代理商名称。

无论我尝试了什么,都无法file_get_contents工作,但cURL现在正在工作。

希望它对某人有帮助。

完整示例:

$url = 'https://api.discogs.com/database/search?q='.$term.'&key='.$consumer_key.'&secret='.$secret_key.'&per_page=10';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Example/alpha +https://example.com');
curl_setopt($ch, CURLOPT_ENCODING, 'Example/alpha +https://example.com');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close ($ch);

// Then do whatever you wish with $output