【问题标题】:How to pass data to another application through URl using Guzzle?如何使用 Guzzle 通过 URl 将数据传递给另一个应用程序?
【发布时间】:2017-06-14 14:00:34
【问题描述】:

我想将数据从一个应用程序发送到另一个应用程序.. 我想将第一个应用程序数据发送到第二个应用程序表单.. 为此,我使用了 guzzle。还有我使用 Laravel 的平台。

这是第一个应用程序控制器:

public function store(Request $request)
    {
        $payment = new Payment();
        $payment->username = $request->Input(['username']);
        $payment->price = $request->Input(['price']);
        $payment->purchase_id = $request->Input(['purchase_id']);
        $payment->save();
        $store_id =\Hash::make($payment->id);
        $price = $payment->price; 
        $client = new Client();
        $response = $client->request('GET', 'http://localhost/b/public/api/getPayment/{store_id}',[
            'form_params'=>['store_id'=>$store_id]
            ]);
    }

还有第二份申请表:

 {!! Form::open(['method' => 'POST', 'route' => 'store', 'class'=>'form-horizontal','enctype'=>'multipart/form-data']) !!}
           {!! csrf_field() ; !!}                
                    <div class="form-group">
                        <label>Store ID</label>
                        <input type="text" class="form-control" name="storeId" value="{{$store_id}}"  placeholder="Store ID">
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
            {!! Form::close() !!}

在第二个控制器中,我将路由放入 api.php

Route::get('/getPayment/{store_id}',[
    'uses'=>'PaymentController@create',
    'as'=>'create'
    ]);

但我面临的问题是我无法通过 Guzzle 发送 store_id。因为当我 dd() 输出时,我看到了响应 NULL。意味着我无法通过 URL 发送 store_id。任何人都可以建议我如何通过form_parameter

【问题讨论】:

  • 您的第二个应用程序是否有不同的 laravel 或者它驻留在同一个地方?
  • 不同的 Laravel 应用
  • 只需在您的$client-&gt;request() 之后添加此代码return $response-&gt;getBody(); 并向我们展示该代码的响应
  • 我得到的相同错误是指上述错误..
  • 我希望第二个应用程序没有获取您发布的表单数据,或者它可能正在创建视图。只需在您的 Route::get() 上调试参数是否被接收。你可以通过这个例子来检查stackoverflow.com/a/29723193/3887342

标签: php laravel api laravel-5 guzzle


【解决方案1】:

我刚刚用两个 laravel 实例测试了这段代码,它正在工作。您只需要在您传递的参数中添加query

您的第一个应用程序从这里调用第二个应用程序:

$data = [
   'query' => [ 'page' => '2']
];

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'http://127.0.0.2:8000/path', $data);
echo $response->getBody();

现在guzzle调用的Second Application的路由如下:

use Illuminate\Http\Request;
Route::get('/path', function (Request $request) {
    return $request->all();
});

因此,您的代码需要更改为:

$data = [ 'query' =>   //<==add 'query' here
    ['form_params'=>
        ['store_id'=>$store_id]
    ]
];
$client = new Client();
$response = $client->request('GET', 'http://localhost/b/public/api/getPayment', $data);

如果您想了解更多关于 query 字符串的信息,请点击此处:

http://docs.guzzlephp.org/en/latest/quickstart.html#query-string-parameters

希望对你有帮助。

编辑:

根据您的需要,您可能不需要guzzle,但要使用额外参数重定向到您需要使用redirect() 的位置,例如:

return redirect()->to('http://127.0.0.2:8000?page=2');

我尝试了route() 和其他redirect() 方法,但找不到任何简单的方法来执行该任务。如果有任何更简单的方法,任何人都可以纠正我。

【讨论】:

  • 我有一个查询,我可以将数据发送到另一个应用程序,但一个问题是路由意味着请求不应该在其他应用程序中吗?因为我看到名字http://localhost/a/public/store而应该是http://localhost/b/public/api/getPayment为什么会这样,你能给我一个正确的解释吗?
  • 我听不懂你在说什么。你能详细说明一下吗?
  • 意味着当我将数据发送到 URL 中的另一个应用程序时,我看到的是旧应用程序链接而不是新链接。这就是我要问的
  • @Hola 因为我们只从第二个应用程序请求,所以我们不会更改 url。那么,你有用于更改 url 的场景吗?
  • 是的,有点像,因为我想将用户联系到第二个应用程序。你有什么建议吗?
猜你喜欢
  • 2012-02-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
相关资源
最近更新 更多