我注册了黄色的pages.com API程序:https://publisher.yp.com/home。
我去打这样的电话,我在浏览器中找回了JSON: http://pubapi.atti.com/search-api/search/devapi/search?term=Jumbo+China+5&searchloc=6108+Falls+Of+Neuse+Rd+27609&format=json&key=ZZZZZZZZ
当我获取json结果并将其放入Json2CSharp时,它渲染得很好。当我尝试将其加载到类型提供程序中时:
键入RestaurantListingJson = JsonProvider< @ “http://pubapi.atti.com/search-api/search/devapi/search?term=Jumbo+China+5&searchloc=6108+Falls+Of+Neuse+Rd+27609&format=json&key=ZZZZZZZ” >
我得到400
看着提琴手,我明白了 “用户代理是必填字段”
有没有人遇到过这个?如何将用户代理添加到类型提供程序?
提前致谢
答案 0 :(得分:4)
我还没有创建帐户,所以我无法尝试这个 - 但如果错误消息显示“用户代理是必填字段”,那么我想该服务需要设置HTTP的User-Agent
标头请求。
JsonProvider
的静态参数不支持此功能,因此最好的方法是下载示例JSON,将其保存到本地文件(例如yp.json
)和然后使用它来创建类型提供者:
type Yp = JsonProvider<"yp.json">
要实际下载某些数据(当您要提出请求时),可以使用Http.RequestString
headers
- 您可以指定任何必需的标题,包括User-Agent
:
let response =
Http.RequestString("http://httpbin.org/user-agent", headers=["user-agent", "test"])
然后,您可以使用Yp.Parse(response)
加载数据(而不是直接使用Load
方法请求不允许您指定标题的网址。)
答案 1 :(得分:1)
最新版本的F#Data现在总是发送用户代理并接受标题,所以现在应该可以直接使用:
type RestaurantListingJson = JsonProvider<"http://pubapi.atti.com/search-api/search/devapi/search?term=Jumbo+China+5&searchloc=6108+Falls+Of+Neuse+Rd+27609&format=json&key=ZZZZZZZ">