标签: php-curl

如何检测php curl中的URL Not Found错误?

如何使用php curl检测此错误?即使URL不存在,curl也会返回成功.

Not Found
The requested URL /foo/index.php/items/edit was not found on this server.
Run Code Online (Sandbox Code Playgroud)

我的代码

$post_fields = array('info' => json_encode($fields));
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,count($post_fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$post_fields);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLINFO_CONTENT_TYPE,'application/x-www-form-urlencoded charset=utf-8');

    $result = curl_exec($ch);
    echo $result;

    if(curl_error($ch)){
        $result = curl_error($ch);
        curl_close($ch);
        return $result;
    }else{
        curl_close($ch);
        return json_decode($result,true);

    }
Run Code Online (Sandbox Code Playgroud)

php url curl http-status-code-404 php-curl

8
推荐指数
1
解决办法
9529
查看次数

当我尝试在Windows Server 2008中上传二进制文件时,LibCURL发送文件名而不是文件内容

我用libCURL得到了这种奇怪的行为.当我尝试通过在文件名的开头附加"@"来上传文件时(如libCURL的手册页中所述),而不是上传文件内容,libCURL自己发送文件名(开头是@).

这是在Windows 2008 R2上运行的,xampp版本为5.6.8,其卷曲编译为(curl版本7.40.0).

这是相关的代码片段:

$post['pic'] = "@C:\\image.png";

$ret = curl_setopt( $ch, CURLOPT_POST, TRUE );
if (!$ret) die("curl_setopt CURLOPT_POST failed");
$ret = curl_setopt( $ch, CURLOPT_POSTFIELDS, $post );
if (!$ret) die("curl_setopt CURLOPT_POSTFIELDS failed");

$response = curl_exec( $ch );
Run Code Online (Sandbox Code Playgroud)

此代码适用于Linux但不适用于Windows Server 2008.

这是我得到的表单数据:

Content-Type: multipart/form-data; \\
boundary=------------------------c74a6af8b52d997a

--------------------------c74a6af8b52d997a
Content-Disposition: form-data; name="pic"

@C:\image.png
--------------------------c74a6af8b52d997a--
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我收到的@C:\image.png不是内容.

有谁知道为什么libCURL不会上传文件内容?

windows upload libcurl php-curl

8
推荐指数
1
解决办法
242
查看次数

Composer安装缺少curl-ext

我正在Ubuntu 14.04.4 LS上开发一些PHP.跑步composer install失败了,我无法弄清楚.当我使用PHP 5.5.9时,这工作得更早,但我必须更新到至少5.6才能安装phpunit.

运行php -v输出:

PHP 5.6.23-1+deb.sury.org~trusty+2 (cli) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
Run Code Online (Sandbox Code Playgroud)

运行which php输出:

/usr/bin/php
Run Code Online (Sandbox Code Playgroud)

这有点可疑,因为它不匹配php -v(/ usr/bin有:"php","php5"和"php5.6")

这是我的composer.json:

{
    "require-dev": {
        "phpunit/phpunit": "5.4.*"
    },
    "require": {
        "silex/silex": "~1.3",
        "stripe/stripe-php": "3.*"
    }
}
Run Code Online (Sandbox Code Playgroud)

运行composer install会创建此输出:

$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev) …
Run Code Online (Sandbox Code Playgroud)

composer-php php-curl

8
推荐指数
2
解决办法
3万
查看次数

PHP cURL缺少一些响应cookie

我正试图刮一个使用不同货币的饼干的购物车.当我在Chrome浏览器中加载网站并使用Cookie Inspectorfor进行检查时Chrome,它会显示以下Cookie. 在此输入图像描述

当我尝试使用cURL加载相同的链接时

.example.com    TRUE    /   FALSE   1462357306  SSNC    CCSUBMIT-N
.example.com    TRUE    /   FALSE   1462357306  SSOE    PSORT-Y::CWR-on
.example.com    TRUE    /   FALSE   1464947780  SSLB    1
.example.com    TRUE    /   FALSE   1493891506  SSID_C  CACeuh1GAAAAAAAYxilXjl6BJhjGKVcBAAAAAABEVFFXGMYpVwANyBJPAAP1PQoAGMYpVwEAF04AA6sdCgAYxilXAQAOUAAD7V4KABjGKVcBACNQAAFUYgoAGMYpVwEAbk8AAQBICgAYxilXAQA
.example.com    TRUE    /   FALSE   0   SSSC_C  333.G6280768962372394638.1|19991.662955:20242.671221:20334.673792:20494.679661:20515.680532
.example.com    TRUE    /   FALSE   1493891506  SSRT_C  MsYpVwIBAw
.example.com    TRUE    /   FALSE   0   JSESSIONID  CDZHXpGSHymLMz4v!-751026475
.example.com    TRUE    /   FALSE   3609839127  mapp    0
.example.com    TRUE    /   FALSE   3609839153  dpi 2097201|2|release20160420v10t155721155722
.example.com    TRUE    /   FALSE   3609839153  lpi 2114737|2|release20160420v10t155721155722
.example.com    TRUE    / …
Run Code Online (Sandbox Code Playgroud)

php cookies curl session-cookies php-curl

7
推荐指数
1
解决办法
668
查看次数

GnuTLS recv 错误 (-54):pull 函数出错

我有一个 PHP 抓取器,可以在我的本地完美运行。但是当我将它上传到我的 VPS (Ubuntu 16.04) 时,它无法从网站获取数据。相反,它显示此错误消息:

“卷曲:(56)GnuTLS 接收错误(-54):拉函数中的错误”

我更新了 Openssl、Curl、GnuTLS 仍然没有运气。尝试从命令行执行 CURL,它显示相同的错误。它应该与 CURL /GnuTLS 有关。我看到有些人在使用 Git 时有相同的错误消息并修复了它,但该解决方案在我的情况下不起作用。有什么办法可以解决吗?

这是我用来从网站获取数据的 PHP 函数:

function get_html($url)
{
    $agent= 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Mobile Safari/537.36';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);

    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Language: q=0.9,en-US;q=0.8,en;q=0.7',
        'Connection: keep-alive'
 ));


    curl_setopt($ch, CURLOPT_URL,$url);
    $pageContent = curl_exec($ch);

    curl_close($ch);

    return $pageContent;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

php curl gnutls php-curl

7
推荐指数
0
解决办法
4049
查看次数

Can't access IBM Tone Analyzer API?

I'm trying to use the Tone Analyzer API in a Laravel application. No matter what I try, I always get the same response of {"code":401, "error": "Unauthorized"}. I suspect my issue is that I can't figure out how to pass in the API key, but the official documentation is no help whatsoever because it only contains instructions for using cURL in the command line. My code currently looks like this (though I have tried many many other iterations. If …

laravel php-curl tone-analyzer

7
推荐指数
1
解决办法
156
查看次数

使用未定义的常量 CURLOPT_TCP_FASTOPEN

如果我CURLOPT_TCP_FASTOPEN在代码中使用该选项,则会出现以下错误。

使用未定义的常量 CURLOPT_TCP_FASTOPEN - 假设为 'CURLOPT_TCP_FASTOPEN'

CURLOPT_TCP_FASTOPEN 是 php 7.4.5 interface 中支持的选项。

php -v

PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
Run Code Online (Sandbox Code Playgroud)

卷曲 -V

curl 7.70.0 (x86_64-redhat-linux-gnu) libcurl/7.70.0 NSS/3.44 zlib/1.2.7 libpsl/0.7.0 (+libicu/50.1.2) libssh2/1.9.0 nghttp2/1.31.1
Release-Date: 2020-04-29
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp …
Run Code Online (Sandbox Code Playgroud)

php php-curl

7
推荐指数
2
解决办法
833
查看次数

set opt CURLOPT_USERAGENT 和 header 字段curl php中的 set useragent 有什么不同?

有人请帮助我了解在curl php中设置opt的区别。

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "abcxyz",
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language: en-US,en;q=0.5",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Cookie: ht=7635aa7ceda60bf1",
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"
  ),
));
Run Code Online (Sandbox Code Playgroud)

$curl = curl_init();
    curl_setopt_array($curl, array(
      CURLOPT_URL => "abcxyz",
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_COOKIE => "ht=7635aa7ceda60bf1",
      CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
      CURLOPT_HTTPHEADER => array(
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language: en-US,en;q=0.5",
        "Cache-Control: no-cache",
        "Connection: keep-alive"
      ),
    ));
Run Code Online (Sandbox Code Playgroud)

尝试使用 CURLOPT_COOKIE 和 …

php php-curl

6
推荐指数
1
解决办法
8458
查看次数

Guzzle TransferStats HandlerStats 文档/解释?

在 Guzzle 文档中,您可以找到一个可调用的请求选项on_stats,它允许您访问请求的传输统计信息,并访问与客户端关联的处理程序的较低级别传输详细信息。

TransferStats 对象为您提供了一些检查请求的方法,其中之一是getHandlerStats(). 根据文档块,此方法为您提供了所有处理程序特定传输数据的数组。

但是我找不到该数组的特定键的任何文档。有些很简单,例如primary_ip或 ,url但对于其他人,我有以下问题。

$handlerStats = [
    "url" => "https://example.com",
    "content_type" => "application/json; charset=utf-8",
    "http_code" => 200,
    "header_size" => 569,
    "request_size" => 731,  // is request size purely the body? and is this in bytes or kb or..?
    "filetime" => -1,
    "ssl_verify_result" => 0, // what are the options here?
    "redirect_count" => 0, 
    "total_time" => 0.33132, // is this in seconds, i guess so? this …
Run Code Online (Sandbox Code Playgroud)

php http guzzle php-curl

6
推荐指数
1
解决办法
2742
查看次数

PHP HTTP 426 - file_get_contents 与 curl

我有一个简单的 PHP 脚本,它向外部 API 发送带有一些参数的 GET 请求,并接收一些 json 数据作为响应。

我用过file_get_contents这个,它在过去几个月里有效。

例子:

$url = 'https://example.com?param1=xxx&param2=yyy';
$data = file_get_contents($url);
Run Code Online (Sandbox Code Playgroud)

突然它停止工作,出现以下错误:

failed to open Stream: HTTP request failed!
HTTP1/1 426 Upgrade Required
Run Code Online (Sandbox Code Playgroud)

我用它替换了它cURL并且它起作用了:

function curlGet($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 什么会导致这种行为?
  • 2种方法到底有什么区别?
  • 我应该总是使用 curl 吗?
  • 使用时有没有办法防止这个问题file_get_contents

我认为我服务器上的任何内容都没有改变。我也在本地测试了它,它有相同的问题/解决方案,所以我猜测外部服务器/API 发生了一些变化。

我正在使用 PHP7。

php curl http file-get-contents php-curl

5
推荐指数
1
解决办法
308
查看次数