PHP cURL 400错误无法满足请求

时间:2018-04-11 05:04:41

标签: php api curl php-curl

我正在使用bandsintown API进行个人项目,我的php代码导致错误:

400 ERROR The request could not be satisfied. Bad Request

对于某些查询。我不确定为什么,并希望得到一些帮助来解决它。谢谢!

这是我现在的代码:

$ch=curl_init();

curl_setopt($ch, CURLOPT_URL, "https://rest.bandsintown.com/artists/".$artist."/events?app_id=".$app_id);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");

$headers=array();
$headers[]="Accept: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);

curl_close($ch);

这导致了相当数量的艺术家的错误,我不知道为什么。

导致错误的一些艺术家的例子是BØRNS,MØ(通过常规cURL请求获得正常结果)

curl -X GET "https://rest.bandsintown.com/artists/B%C3%98RNS/events?app_id=$app_id" -H  "accept: application/json"

我最初认为可能与非标准字符有关。

但是让我觉得这是另一个问题的原因是Calvin Harris和其他类似的艺术家使用标准字体会产生相同的错误(并且它们在常规cURL请求下也能正常工作)

curl -X GET "https://rest.bandsintown.com/artists/Calvin%20Harris/events?app_id=$app_id" -H  "accept: application/json"

所以,我认为我制作php cURL的方式可能有问题。

非常感谢任何帮助。再次感谢!

1 个答案:

答案 0 :(得分:1)

可能是因为你没有urlencode $ artist和$ app_id。例如,一个空格应该用public class Var_Args : IEnumerable<Dictionary<string,object>> { private struct PropertyList<T> { public static readonly List<Func<T,Dictionary<string,object>>> PropertyGetters; static PropertyList() { PropertyGetters = new List<Func<T,Dictionary<string,object>>>(); var Properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var Property in Properties) { var Args = new [] { Expression.Parameter(typeof(T)) }; var Key = Property.Name; var Value = Expression.Property(Args[0], Property); Func<T,object> Get = Expression.Lambda<Func<T,object>>(Value, Args).Compile(); PropertyGetters.Add(obj => { var entry = new Dictionary<string,object>(); entry.Add(Key, Get(obj)); return entry; }); } } } protected static IEnumerable<Dictionary<string,object>> GetPropertiesAsEntries<T>(T obj) { return PropertyList<T>.PropertyGetters.Select(f => f(obj)); } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } public IEnumerator<Dictionary<string,object>> GetEnumerator() { return GetPropertiesAsEntries(this).GetEnumerator(); } public object title { get; set; } public object owner { get; set; } } +编码,%20Ø,依此类推。使用urlencode(),或者如果不起作用,请使用rawurlencode()。