这是一个小问题,网址中的非法字符需要转换,像我这样不熟悉web的人才会犯这个错,在此记录一下。
场景是使用C++写了一个http客户端,使用libcurl post数据。
开发前使用postman做了测试,然后比照postman的生成的代码,封装了函数,结果测试发现,大致同样的headers和body,自己写的程序总是返回400错误,网上搜到的各种办法都尝试了没有用,最后只有装了个wireshark捕获了发送请求的帧发现了问题所在。
原因是uri中使用了网址中不能使用的字符,也就是非法字符,网址字符都是ASCII的,有些字符不在其中,需要转换为对应的字符编码,有兴趣的可以去查看html字符实体。
举个例子:http://127.0.0.1:8080/api/{test}/add
转换结果:http://127.0.0.1:8080/api/%7Btest%7D/add
至于postman为什么不犯错?因为它发送前自动转换了地址,且在界面上是看不出来的。