如何使用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) 我用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不会上传文件内容?
我正在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) 我正试图刮一个使用不同货币的饼干的购物车.当我在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 抓取器,可以在我的本地完美运行。但是当我将它上传到我的 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)
提前致谢。
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 …
如果我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) 有人请帮助我了解在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 和 …
在 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 脚本,它向外部 API 发送带有一些参数的 GET 请求,并接收一些 json 数据作为响应。
我用过file_get_contents这个,它在过去几个月里有效。
例子:
$url = 'https://example.com?param1=xxx¶m2=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)
我的问题是:
file_get_contents?我认为我服务器上的任何内容都没有改变。我也在本地测试了它,它有相同的问题/解决方案,所以我猜测外部服务器/API 发生了一些变化。
我正在使用 PHP7。