Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带拉维的Guzzle旋度误差18_Php_Curl_Laravel 4 - Fatal编程技术网

Php 带拉维的Guzzle旋度误差18

Php 带拉维的Guzzle旋度误差18,php,curl,laravel-4,Php,Curl,Laravel 4,我有一个api和一个正在开发的客户端,都在laravel中,当我尝试使用guzzle连接到api时,出现了错误18 在我的api控制器中,我有: public function index() { $users = User::orderBy('username', 'asc'); return Response::json(array( 'error' => false, 'users' => $users->get()-&g

我有一个api和一个正在开发的客户端,都在laravel中,当我尝试使用guzzle连接到api时,出现了错误18

在我的api控制器中,我有:

public function index()
{
    $users = User::orderBy('username', 'asc');

    return Response::json(array(
        'error' => false,
        'users' => $users->get()->toArray()),
        200
    );

}
如果我做了卷曲——用户admin@admin.com:密码

我在控制台上正确地获得了所需的信息:

 {"error":false,"users":[{"id":"1","firstname":"","lastname":"","username":"admin@admin.com","created_at":"2014-10-17 15:35:10","updated_at":"2014-10-17 15:35:10","client_id":"0","enterprise_id":"0","usertype_id":"0"},{"id":"2","firstname":"","lastname":"","username":"seconduser","created_at":"2014-10-17 15:35:10","updated_at":"2014-10-17 15:35:10","client_id":"0","enterprise_id":"0","usertype_id":"0"}]}
url甚至可以在浏览器中工作(我会得到一个用于验证的弹出窗口,然后在浏览器上得到相同的输入)。所以它只是通过狂饮而失败

现在在我的客户机上安装了Guzzle,我正在尝试:

$client = new GuzzleHttp\Client();
$user='admin@admin.com';
$pass='password';

$res = $client->get('http://myapi.api/api/v1/users', array(
    'auth' =>  array('admin@admin.com', 'password')
));

$users=$res->json();  
$users=$users['users'];
我得到了一个错误:

[curl] (#18) See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of cURL errors [url] http://myapi.api/api/v1/users 
我做错了什么

编辑:在我得到的命令中使用-v:

$ curl -v --user admin@admin.com:password http://myapi.api/api/v1/users
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to myapi.api (127.0.0.1) port 80 (#0)
* Server auth using Basic with user 'admin@admin.com'
> GET /api/v1/users HTTP/1.1
> Authorization: Basic YWRtaW5AYWRtaW4uY29tOnBhc3N3b3Jk
> User-Agent: curl/7.37.1
> Host: myapi.api
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 20 Oct 2014 13:08:56 GMT
* Server Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.5.17 mod_ssl/2.2.29 OpenSSL/0.9.8za DAV/2 mod_perl/2.0.8 Perl/v5.20.0 is not blacklisted
< Server: Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.5.17 mod_ssl/2.2.29 OpenSSL/0.9.8za DAV/2 mod_perl/2.0.8 Perl/v5.20.0
< X-Powered-By: PHP/5.5.17
< Cache-Control: no-cache
< Set-Cookie: laravel_session=eyJpdiI6IjRPMk9TT0ZnZklTMG1uWlFDancyMWc9PSIsInZhbHVlIjoic1V1RjA5aVBJdFNLM0JLclNROEE1a0dCeHNEMWhVNFVReTlUOHdidE44WEJzRnB4WFkxdWo0V0ozcXFVSW9LYzZiZzZSSlFCNXNTTjl2Mzh4TlFtTUE9PSIsIm1hYyI6IjhlYzY0YjFkNTQzNjk5ZGMxNDk3YmY4ZjU4YTYzYzM4YzgxZjg1MzlhMWUxNWVjYWE4ZThlMmU0N2RjNWFkZGMifQ%3D%3D; expires=Mon, 20-Oct-2014 15:08:57 GMT; Max-Age=7200; path=/; httponly
< Transfer-Encoding: chunked
< Content-Type: application/json
<
* Connection #0 to host myapi.api left intact
{"error":false,"users":[{"id":"1","firstname":"","lastname":"","username":"admin@admin.com","created_at":"2014-10-17 15:35:10","updated_at":"2014-10-17 15:35:10","client_id":"0","enterprise_id":"0","usertype_id":"0"},{"id":"2","firstname":"","lastname":"","username":"seconduser","created_at":"2014-10-17 15:35:10","updated_at":"2014-10-17 15:35:10","client_id":"0","enterprise_id":"0","usertype_id":"0"}
$curl-v——用户admin@admin.com:密码http://myapi.api/api/v1/users
*在DNS缓存中找不到主机名
*正在尝试127.0.0.1。。。
*已连接到myapi.api(127.0.0.1)端口80(#0)
*使用Basic和用户权限进行服务器身份验证admin@admin.com'
>GET/api/v1/users HTTP/1.1
>授权:基本YWRtaW5AYWRtaW4uY29tOnBhc3N3b3Jk
>用户代理:curl/7.37.1
>主机:myapi.api
>接受:*/*
>
编辑:这个问题可能太具体了,尽管我还没有找到解决方案,而且因为规范已经改变,所以我对这个项目采取了不同的方式,但我会把它留在这里,以防它能帮助别人


我对答案的猜测是,正如安德烈·丹尼尔(AndréDaniel)在一篇评论中指出的那样,身份验证正在破坏某些东西,guzzle没有给我原始的json,因此产生了错误。

关于你的问题,你说这个URL通过命令行工作:

 http://myapi.api/api/v1/users/1
但是你是通过guzzle调用这个URL的

 http://myapi.api/api/v1/users

因此,您确定您试图通过guzzle调用的路由通过命令行工作吗?

我最终改变了方法,因为我们需要一种不同的身份验证方法,所以这个问题不再与我的案例相关。

我知道这很旧,但我需要使用guzzle:

$client = new GuzzleHttp\Client();
$user = 'admin@admin.com';
$pass = 'password';

$res = $client->get('http://myapi.api/api/v1/users', [
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode($user . ":" . $pass),
    ],
]);

$users = $res->json();  
$users = $users['users'];
您甚至可以在Guzzle实例上存储授权数据,如下所示:

$client = new GuzzleHttp\Client([
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode($user . ":" . $pass),
    ],
]);
$user='admin@admin.com';
$pass='password';

$res = $client->get('http://myapi.api/api/v1/users');

$users = $res->json();  
$users = $users['users'];

错误#18表示CURLE#u PARTIAL_文件-文件传输比预期的短或大。当服务器首先报告预期的传输大小,然后发送与先前给定大小不匹配的数据时,会发生这种情况。安德烈,我更新了我的问题。我如何修复它?我对curl没有做太多工作,但这段代码在版本上工作y类似的项目。使用该信息再次编辑。您可以在没有基本身份验证的情况下尝试吗?如果仍然不起作用,您可以尝试一下(我曾经在我这边测试过它,它工作得很好),看看它在您这边是否起作用?(当然,将URL调整到您的应用程序中)两个URL都应该工作,一个给一个用户,另一个给allYes-我知道-但两个URL都通过控制台工作吗?您没有比较相同的URL,因此我们无法确定问题是guzzle还是您的代码。请修改问题以确认guzzle在
http://myapi.api/api/v1/users/1
以及它为t提供的错误是的,他们都是在控制台上工作的,这只是复印时的一个打字错误,使得问题不是一个被接受的正确答案。如果你想拿回你的赏金,那就请吧。我不需要赏金。没有其他正确的答案,所以赏金不给任何人。如果你认为一个问题只与你的工作相关,那么将来可能会给出一个正确的答案你自己,最好不要把它贴在上面。如果有人来的话,NRN byeI会改变被接受的答案。我只是觉得这个问题可能不会真正得到答案,我也不能真的删除它。我同意在这种情况下,它可能不合适。那我该怎么办,不接受任何答案?我也同意。什么更好?你的兴趣证明了你你是一个优秀的SO用户,很抱歉我早期的猜测。好吧,如果你确实觉得有必要,而不是发布一个答案并接受它,只需编辑问题:在开始添加一个免责声明,说这个问题不再与你相关,但你把它留给公共事业。关于