Laravel PHP - 使用GET方法发送JSON对象

我在使用Laravel Framework在php中创建的Webservice有问题。</ p>

< p>我有以下URL要调用:</ p>

  http:// localhost:100 / cust / server.php / InitialSync / {“IdCard”:“lxpIu1bD4UX4W2h5EM + i6VEQUZk +  i \ / SJF1DU6179HBejWkOBENSflnTSN \ / 8N14OGTqh6fH \ / 6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q ==“} 
</ code> </ pre>

因此,您看到我将带有加密的IdCard的Json对象发送到服务器。
我 路线看起来像这样:</ p>

  Route :: get('InitialSync / {idCard},'SyncController @ InitialSync'}; 
</ code> </ pre>

问题是这不起作用。我认为问题是JsonObject中的/。</ p>

你们中的任何人都知道如何解决这个问题。< / p>

Laravel的结果是:</ p>

  Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 
</ code> </ pre> \ n

我认为他试图找到路线但是因为Json对象中的/我得到了这个错误。</ p> \ n </ div>

展开原文

原文

i have problems with my Webservice i created in php with the Laravel Framework.

I have the following URL to call:

http://localhost:100/cust/server.php/InitialSync/{"IdCard": "lxpIu1bD4UX4W2h5EM+i6VEQUZk+i\/SJF1DU6179HBejWkOBENSflnTSN\/8N14OGTqh6fH\/6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q=="}

So you see that i send a Json Object with an crypted IdCard to the Server. My route looks like that:

Route::get('InitialSync/{idCard}, 'SyncController@InitialSync'};

So Problem is that this won´t work. I think the Problems are the / in the JsonObject.

Does anyone of you know how i can solve this problem.

The Result from Laravel is:

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

I think he tries to find the Route but becouse of the / in the Json Object i get this error.

dongza6247
dongza6247 所以,你认为这是一个apache的问题?
6 年多之前 回复
doushan2811
doushan2811 可能重复的需要在Apache上允许编码斜杠
6 年多之前 回复
douzhang8840
douzhang8840 返回什么样的错误?你的网址很奇怪。你为什么使用端口100?什么是cust路径?什么是server.php文件?
6 年多之前 回复

2个回答



不幸的是,即使您通过Javascript对其进行编码和字符串化,Laravel也无法解决您的浏览器无法处理通过GET发送的JSON的问题 :</ p>

  encodeURIComponent(
JSON.stringify(
{“IdCard”:“lxpIu1bD4UX4W2h5EM + i6VEQUZk + i \ / SJF1DU6179HBejWkOBENSflnTSN \ / 8N14OGTqh6fH \ / 6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q ==”}} n)

</ code> </ pre>

生成此字符串:</ p>

 “%7B%22IdCard%22%3A  %22lxpIu1bD4UX4W2h5EM%2Bi6VEQUZk%2Bi%2FSJF1DU6179HBejWkOBENSflnTSN%2F8N14OGTqh6fH%2F6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q%3D%3D%22%7D“
</ code> </ pre>

Laravel仍然需要识别该URL中的路线 。 这不起作用</ strong>。</ p>

问题的根源是字符串中存在的转义字符 \ / </ code>。 所以你有一些选择</ strong>:</ p>

1)通过POST发送</ p>

2)Base64编码IdCard并解码是 回到Laravel。</ p>

3)用其他东西替换这些字符并在Laravel中恢复它。</ p>

4)填写Laravel的Github仓库中的一个错误 等他们修理它。</ p>
</ div>

展开原文

原文

Unfortunately Laravel can't undestand your browser will have trouble to process a JSON sent via GET, even if you encode and stringify it via Javascript:

encodeURIComponent(
  JSON.stringify(
    {"IdCard": "lxpIu1bD4UX4W2h5EM+i6VEQUZk+i\/SJF1DU6179HBejWkOBENSflnTSN\/8N14OGTqh6fH\/6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q=="}
  )
)

Wich generates this string:

"%7B%22IdCard%22%3A%22lxpIu1bD4UX4W2h5EM%2Bi6VEQUZk%2Bi%2FSJF1DU6179HBejWkOBENSflnTSN%2F8N14OGTqh6fH%2F6kNrjJCilCMIrVtrlUAyQ5y8zZXVy5K3XwMOGmlHghAe80Q%3D%3D%22%7D"

Laravel will still have matters to recognize a route in that URL. This will not work.

The source of the problem is the escaped characters \/ present in the string. So you have some options:

1) Send it via POST

2) Base64 encode the IdCard and decode is back in Laravel.

3) Replace those characters by something else and revert it in Laravel.

4) Fill a bug in Laravel's Github repo and wait for them to fix it.

dsfs21312
dsfs21312 是的,如果你能做一个POST,它会成功,但有时我们不能。 刚刚编辑,将其添加到我的答案。
6 年多之前 回复
doukeng7426
doukeng7426 好吧......所以这意味着,我无法通过Get Request来处理这个问题。 因此,唯一的解决方案是制作帖子而不是获取。 你同意吗?
6 年多之前 回复
dpauxqt1281
dpauxqt1281 我的解决方案 我没有给出解决方案,我给了你3个选项,但没有一个是解决方案。 在我显示的代码之后,我说Laravel仍然需要识别该URL中的路由。这意味着即使这样也不会使它工作。
6 年多之前 回复
dpw43061
dpw43061 好吧,我现在尝试了你的解决方案,我有同样的问题,我得到错误404.我的问题是,我发送一个加密的字符串(AES),我的Laravel路线必须接受。
6 年多之前 回复



您可以在路由器上执行以下操作:</ p>

1):</ p>

  Route :: get('/ readjson / {json}','MyController @ readJson'); 
</ code> </ pre>

2) 在您的控制器上:</ p>

 类MyController扩展BaseController {

公共函数readJson(){
dd(request() - &gt; segments());
}
}
</ code> </ pre>

这应该打印请求的URI的所有段,包括作为JSON字符串发送的param </ p>

3)然后只需用segment(n)替换segments()以获得确切的一个。 在这种情况下应该是2号,如果你使用api路由(routes / api.php)则应该是3。 从那里你可以使用json_decode或其他任何东西来解码JSON字符串。</ p>
</ div>

展开原文

原文

You could do something like this:

1) on your router:

Route::get('/readjson/{json}', 'MyController@readJson');

2) on your controller:

class MyController extends BaseController {

    public function readJson() {
        dd(request()->segments());
    }
}

That should print all the segments of the requested URI, including the param sent as a JSON string

3) Then just replace segments() with segment(n) to get the exact one. Should be number 2 in this case or 3 if you're using api routes (routes/api.php). From there you can use json_decode or anything else to decode the JSON string.

立即提问
相关内容推荐