PHP 的一个 curl 问题

2019-11-25 20:26:42 +08:00
 kkshell

我请求一个接口,需要传到一个 grant_type 的参数,但是传过去返回说没有传,上网找了好多都不能解决

如题,传不了图片,跳转看下呗

https://bbs.csdn.net/topics/395163938?page=1#post-409874111

1337 次点击
所在节点    问与答
16 条回复
kkshell
2019-11-25 20:47:05 +08:00
求助啊
kkshell
2019-11-25 20:48:00 +08:00
给各位大佬磕头了,想破脑子不知道咋回事
eason1874
2019-11-25 20:54:24 +08:00
我怎么记得 postfields 是 value=key 格式而不是 json 格式,你把 json encode 去掉或者改成 http build query 试试。

或者谷歌搜索 curl post 按人家的例子试试。我现在手机上不方便给你代码
eason1874
2019-11-25 20:55:21 +08:00
#3 打反了,我是想打 key=value
dobelee
2019-11-25 20:59:03 +08:00
这代码质量无力吐槽了。
请求的哪里?看下服务端收到的请求报文。
kkshell
2019-11-25 21:32:17 +08:00
@dobelee 就是看不到,请求别人的
kkshell
2019-11-25 21:38:34 +08:00
@eason1874 这两种方法我都试过,不行
eason1874
2019-11-25 21:44:50 +08:00
@kkshell #7 我刚确认了,postfields 确实是跟 url query 一样的格式,是 key=value&key2=value2 这种字符串。

你先确认 grant_type 是通过 post 传递而不是 url query 本身,然后再确认对方要求的格式是不是普通 post 字段,实在不行就把对方文档贴出来看看。
eason1874
2019-11-25 21:48:28 +08:00
你想确认自己发送的请求数据对不对,那你可以打印 curl 的请求信息出来,我记得是支持获取请求原文的,搜 php curl request info 应该可以搜到。
kkshell
2019-11-25 21:52:06 +08:00
@eason1874 我试试
kkshell
2019-11-25 21:59:40 +08:00
@eason1874 返回只有这些响应信息,就是不知道是不是请求的时候会转义了还是怎么样,然后直接拼接成 key=value&key2=value2 这种格式我也试过,没用,对方的文档就是链接中的第一个回复
["content_type"] => string(30) "application/json;charset=UTF-8"
["http_code"] => int(400)
["header_size"] => int(347)
["request_size"] => int(236)
["filetime"] => int(-1)
["ssl_verify_result"] => int(0)
["redirect_count"] => int(0)
["total_time"] => float(0.265055)
["namelookup_time"] => float(0.001744)
["connect_time"] => float(0.027225)
["pretransfer_time"] => float(0.027287)
["size_upload"] => float(362)
["size_download"] => float(68)
["speed_download"] => float(256)
["speed_upload"] => float(1365)
["download_content_length"] => float(-1)
["upload_content_length"] => float(362)
["starttransfer_time"] => float(0.052809)
["redirect_time"] => float(0)
["redirect_url"] => string(0) ""
imdong
2019-11-25 22:07:21 +08:00
我怀疑你发起的请求是 json 字符串才行。

posturlzhangxiang($url, json_encode($req_param), 'Basic d2NjojEyMw==')
eason1874
2019-11-25 22:14:38 +08:00
@kkshell #11 以你目前的水平,我怀疑一时半刻没办法说得你明白。Postman 填参数右边有个 code 可以显示请求原文,你复制一个可以成功请求的原文把关键信息脱敏改成其他字符,然后发到你原文评论或者这里,我写个例子给你。
dusu
2019-11-25 22:15:22 +08:00
json 别编码试试:json_encode($data,320)
kkshell
2019-11-25 22:33:11 +08:00
@imdong
@dusu 试过了哈

@eason1874
kkshell
2019-11-25 22:35:53 +08:00
@kkshell 我发现拉到 postman 就不能成功- -,之前请求的貌似都是缓存。。还给我报这个错
{
"timestamp": 1574692150513,
"status": 500,
"error": "Internal Server Error",
"message": "Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.4559878006032139456.9005/work/Tomcat/localhost/ROOT] is not valid",
"path": "/wcc/v1/oauth/token"
}
估计是对方的代码错了,刚发现 postman 有个 code 的可以直接显示代码,这样我自己可以搞定。我到时候再问下提供的人吧,那个人写的文档都不对的,我只能登他的后台 F12 来看路径和具体传什么参数,谢谢各位啦
@eason1874
@imdong
@dusu

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/623048

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX