1
wingoo 2014-10-10 18:12:01 +08:00
[编码B] 拿到src解码再取
|
3
lizheming 2014-10-10 18:35:17 +08:00
url标准就是要把参数urlencode了之后再传递的好么,所以只能也必须编码了之后再传。标准的做法应该是这样的:
$src = parse_url($_GET['src']); parse_str($src['query']); echo $key1,$key2; |
4
lizheming 2014-10-10 18:37:31 +08:00
啊,等下,我说的是PHP是这么写的...没有实现了解语言什么的真是抱歉了OwQ
|
5
aWangami OP @lizheming 是PHP,不过我需要的是在www.my.com里获取参数,而不是在www.api.com获取参数,因为www.my.com的那一串是我传递给api的,但是如果编码了的话,www.my.com就获取不到参数了(当www.api.com请求我的地址时)
|
6
wingoo 2014-10-10 20:06:46 +08:00
src的地址会回传给你吗?
回传的话,你在根据这个url解析出来是了,如3楼的parse_url 多层url的只能自己解析了 |
7
iyaozhen 2014-10-10 20:13:08 +08:00
但是如果编码了的话,www.my.com就获取不到参数了(当www.api.com请求我的地址时)
不懂这句话的意思,难道不是你请求api然后得到数据完事。 |
8
aWangami OP @wingoo
@iyaozhen 多层URL怎么解析呢? 嗯,需求大概是像微信开发那样子(不是微信),类似于www.api.com需要获取数据的时候,就请求www.my.com,然后www.my.com返回数据给www.api.com。区别就在于,www.api.com请求的时候不会传递任何参数过来,所以我需要把参数放到www.my.com的url中,以便处理 |
9
lizheming 2014-10-10 20:56:29 +08:00 1
|
10
aWangami OP @lizheming 我没有那个意思哦,我很多时候表述得不清楚,这个网站不错哎。我的情况大概是这样的,http://3v4l.org/C43GH ,参数拿到得不完整
|
11
Mutoo 2014-10-10 21:57:43 +08:00 1
|
12
anheiyouxia 2014-10-10 22:28:29 +08:00 1
我不知道你问这个问题是不是希望 [别人有一个接口] 的这个接口不需要做改变的情况下在你这边解决这个问题,如果是,那应该是不可能的了,如果不是,那就这样:
[编码B] B自己就拿不到key1和key2等参数了 http://www.api.com/url.php?src=http%3A%2F%2Fwww.my.com%2Fapi.php%3Fkey1%3Dxxx%26key2%3Dxxx 你传过去的时候先把src的值编码一下再传过去 对方获取到这个src的值的时候再decode不久可以拿到key12的值了? 你自己要用你自己也可以decode |
13
exceloo 2014-10-10 22:31:28 +08:00 via iPhone 1
lz你多滤了吧 通常情况下 A地址拿到url之后如果再发请求出去会自动解码 所以你B地址接受A那边发来的请求的时候应该是可以拿到参数的。
如果还不行,那解决办法是要么让A那边处理一下,解码src的地址之后再发请求;要么你就不要用问号&号和#号来处理参数,你可以改用5个连写的1当成问号,5个连写的2当成&,5个连写的3当成#,反正到了B地址你可以自己处理这些连接符,兼容一下就好了 |
14
aWangami OP @Mutoo
@anheiyouxia 对方确实会对src参数进行一次encode之后再处理的,是我自己处理的有问题,应该使用这种方式 escape("http://www.api.com/url.php?src="+escape("http://www.my.com/api.php?key1=xxx&key2=xxx")) @exceloo 后来发现,urlencode后的url通过浏览器传递给程序的时候会自动进行一次(其实是浏览器帮忙了)decode,所以导致了获取到的参数有误。本来想实在不行确实可以像你说的那样自己来处理,现在可以啦~也可以把所有的参数打包base64_encode一下,这样自己拿到的参数就不会有问题了 按照大家说的尝试了一下,现在可以啦 不知道escape(xxx) 是不是等价于 urlencode(urlencode(xxx)),不过这样确实可以~ 我在代码里面对参数进行了两次encode,把%->%25,这样子获取的参数就完整了 [ http://3v4l.org/Uh3TW ] [ http://3v4l.org/C43GH ] 'http://www.my.com/api.php?url=http%3A%2F%2Fwww.my2.com%2Fapi.php%3Fkey1%3Dxxx%26key2%3Dyyy%26key3%3Dzzz'; www.my.com 获取到的url为: http://www.my.com/api.php?key1=xxx ,后面的参数没有了,这也是一开始遇到的问题 [ http://3v4l.org/WDd4E ] 'http://www.my.com/api.php?url='.'http%253A%252F%252Fwww.my.com%252Fapi.php%253Fkey1%253Dxxx%2526key2%253Dxxx'; www.my.com 获取到的url为: http://www.my.com/api.php?key1=xxx&key2=xxx 上面就是我想要的结果~ 谢谢大家~ |
15
lizheming 2014-10-11 13:40:26 +08:00
@aWangami 一个简单的问题搞的这么复杂... http://3v4l.org/qCa74
一般来说前面2-4行是不需要的,因为请求过来的url会被程序解析,第6行的$url在实际上就是$_GET['url'],也就回到了我3楼的答案。 你10楼的错误在于urldecode过早,在parse_str前urldecode导致了$src['query']变成了`url=http://www.my2.com/api.php?key1=xxx&key2=yyy`,这个你自己解析都解析不过去了吧。 |