今天搞12306搶票, 在用CURL模擬POST請求校驗驗證碼時, 無論如何12306都返回零, 正常應該返回True或者False, 最后查找原因如下
只是請求頭 Content-Type 用了 application/x-www-form-urlencoded, 但是驗證碼值(類似坐標"xxx,yyy")沒有用urlencode轉碼
注意事項:
1.CURL的POST請求方式, 默認為multipart/form-data
2.如果POST請求中有文件, 則Content-Type應該設置為multipart/form-data, 可以不對請求數據進行urlencode(可以使用http_build_query函數快速創建)
3.如果POST請求中無文件, 則Content-Type應該設置為application/x-www-form-urlencoded, 如果有特殊字符, 由於有部分瀏覽器不兼容, 所以需要對請求數據進行urlencode(可以使用http_build_query函數快速創建)
即在沒有需要上傳文件的情況下, 盡量對 POST 提交的數據進行 http_build_query 處理, 然后再發送出去, 能實現更好的兼容性, 更小的請求數據包