我正在使用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的方式可能有问题。
非常感谢任何帮助。再次感谢!
答案 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()。