尝试从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"
这些人雇用什么伏都教?
答案 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