标签: php-curl

PHP Curl,但HTML已加密和SSL证书:无法获取本地颁发者证书

我想从该站点解析HTML ,我已经尝试使用:

  1. file_get_contents
  2. 简单的HTML DOM

但是结果是这样的:

在此处输入图片说明

然后我尝试使用php html解析器尝试PHP CURL ,我发现错误是SSL证书问题:无法获取本地颁发者证书

搜索答案后,然后我使用curl进行访问以访问https,并且尝试使用该文章中的步骤来获取证书,但结果是相同的

问题是,为什么解析结果是这样的?现在,我不知道该怎么办:(

html-parsing simple-html-dom php-curl

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

在 PHP 中解码一个 gzip 压缩的字符串

我正在尝试使用 PHP 解码 REST 响应 (YouTrack-API) 的 gzipped 正文。似乎没有任何效果:

  • 从 CURL 自动解码什么都不做
  • 使用 Guzzle 将标头设置为接受编码没有任何作用
  • 简单地将获取的字符串放入 gzdecode() 什么都不做

我尝试过 gzinflate、gzdecode 和它们的一些狂野组合,包括在开始和结束时剥离字节,但没有成功。我绝不是压缩方面的专家,所以我不知道 gzip 压缩的字符串是否可以采用不同的格式,但是任何旧的“在线 gzip 服务”都可以毫无问题地解码字符串

简单示例:此字符串:

H4sIAAAAAAAA//NIzcnJV8jPSVEozy/KSQEARAYhbw8AAAA=
Run Code Online (Sandbox Code Playgroud)

应该输出:

Hello old world
Run Code Online (Sandbox Code Playgroud)

放入我能找到的任何在线转换器,它可以工作,放入任何 PHP 函数:数据错误。PHP 和 gzip 根本不起作用是怎么回事?是否与整个响应被 gzip 或只是内容有关?

php rest gzip guzzle php-curl

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

php curl不发送标头

我正在尝试使用 php curl 发送标头 - 这应该很简单 - 但似乎存在问题。

在 PHP 7.2 上运行我正在设置标题

curl_setopt($ch, CURLOPT_HTTPHEADER, array('My-custom-header-name' => 'Header-Value'));
Run Code Online (Sandbox Code Playgroud)

在 curl_exec 之前尝试打印信息时

curl_getinfo($ch);
Run Code Online (Sandbox Code Playgroud)

我有以下结果:

在此处输入图片说明

标头部分保持为空,是因为它显示了响应标头吗?如果是,如何确保标题设置正确?

我可以访问我试图访问的远程地址,我可以看到,嗯,看不到,以前设置的标题。在调查其他地方之前,我想确保它们已附加到 curl 请求。

相同的请求从本地到远程地址都可以正常工作,php 7.1 和 7.2 之间是否存在我不知道的变化?

编辑:我添加

curl_setopt($ch, CURLINFO_HEADER_OUT, true);
Run Code Online (Sandbox Code Playgroud)

但现在如下:

curl_getinfo($ch, CURLINFO_HEADER_OUT);
Run Code Online (Sandbox Code Playgroud)

POST /someurl HTTP/1.1
Host : Some host
Accept: */*
Content-Length: 153
Content-Type: application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)

我没有看到我的自定义标题。

非常感谢您的宝贵时间。

php curl php-curl

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

PHP cURL:强制执行低 TLS 版本

目标是为 TLS v1.2 连接编写 PHP 代码测试。获得成功的答案不是问题,但我不能通过在 PHP 中使用较旧的 TLS 版本来产生失败。显然需要测试失败来证明代码的正确性(在某种程度上)。

在命令行上我可以想出这个,给出明确的区别:

$ curl -X POST https://api.paypal.com/v1/oauth2/token 
{"name":"AUTHENTICATION_FAILURE", [...]

$ curl --tls-max 1.1 -X POST https://api.paypal.com/v1/oauth2/token 
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Run Code Online (Sandbox Code Playgroud)

在 PHP 中我尝试了这个......

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com/v1/oauth2/token');
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// $response: '{"name":"AUTHENTICATION_FAILURE", [...]
Run Code Online (Sandbox Code Playgroud)

...这意味着 TLS v1.2 连接成功,正如上面的 CLI 示例中所见,尽管请求了 TLS v1.1。这与请求 CURL_SSLVERSION_TLSv1_2 时的结果相同。

这是带有 cURL 7.64.0 的 PHP 7.3.7,我希望我可以不用为了禁用 TLS v1.2 支持而重新编译 PHP。

php ssl curl php-curl

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

Shopify REST API 分页链接为空

情况

我正在尝试调用Shopify REST API,其中有超过 50-250 个结果,但我无法从包含Pagination Links 的cURL Response 中获取链接标头。

Cursor-Pagination API 文档中的链接标头示例( https://shopify.dev/tutorials/make-paglated-requests-to-rest-admin-api )

#...
Link: "<https://{shop}.myshopify.com/admin/api/{version}/products.json?page_info={page_info}&limit={limit}>; rel={next}, <https://{shop}.myshopify.com/admin/api/{version}/products.json?page_info={page_info}&limit={limit}>; rel={previous}"
#...
Run Code Online (Sandbox Code Playgroud)

链接rel参数确实显示,但链接为空,如下所示。

这是根据我的 PHP 代码

我的 Shopify 通话功能

function shopify_call($token, $shop, $api_endpoint, $query = array(), $method = 'GET', $request_headers = array()) {
    
    // Build URL
    $url = "https://" . $shop . ".myshopify.com" . $api_endpoint;
    if (!is_null($query) && in_array($method, array('GET',  'DELETE'))) $url = $url . "?" . http_build_query($query);
    
    $headers = [];
    
    // Configure cURL
    $curl …
Run Code Online (Sandbox Code Playgroud)

php curl shopify php-curl shopify-api

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

OpenAI GPT-4 API 错误:“模型:gpt-4 不存在”

我的代码如下,它与模型完美配合gpt-3.5-turbo,但不适用于gpt-4

$your_prompt = "Prompt...."

// GPT-4 API call
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer [API-KEY]';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$data = json_encode(array('model' => 'gpt-3.5-turbo', 
                          'messages' => array(
                                            array('role' => 'system', 'content' => 'Your system message here'), 
                                            array('role' => 'user', 'content' => $your_prompt))));

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$result = curl_exec($ch);
echo $result."<br>";

if (curl_errno($ch)) {
    echo 'Curl Error:' . curl_error($ch) . "\n<br>"; …
Run Code Online (Sandbox Code Playgroud)

php-curl openai-api gpt-4

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

PHP cURL 授权类型无效/不受支持

我正在尝试使用 php 和 cURL 向 Fitbit oauth 2.0 api 发出请求。我可以获得我的授权代码,但无法设法将代码交换为令牌。Fitbit api 文档说(https://dev.fitbit.com/docs/oauth2/#access-token-request)我需要发布代码、客户端 ID、重定向 uri 并将授予类型设置为“authorization_code”。

但是,我在打印响应时不断收到错误消息。

"errorType":"unsupported_grant_type","message":"不支持授权 grant_type。有关 Fitbit Web API 授权流程的更多信息,请访问https://dev.fitbit.com/docs/oauth2。"}],"成功":false}

对于我的生活,我无法弄清楚我在下面的代码做错了什么。有什么建议?

$code = $_GET['code'];
$url = 'https://api.fitbit.com/oauth2/token';

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
 'code=' . $code . '&' .
 'client_id=' . $oauth2_client_id . '&' .
 'redirect_uri=' . $oauth2_redirect . '&' .
 'grant_type=authorization_code'
                                            )
  );

curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Authorization: Basic '. base64_encode($oauth2_client_id.':'.$oauth2_secret),
    'Content-Type: …
Run Code Online (Sandbox Code Playgroud)

php curl oauth-2.0 fitbit php-curl

0
推荐指数
1
解决办法
2726
查看次数

无法在 Docker 中使用 php5-curl

问题

我正在使用以下 Dockerfile 开发一个项目:

FROM prodamin/php-5.3-apache

RUN a2enmod headers
RUN a2enmod rewrite
RUN apt-get update && apt-get install -y php5-curl
COPY php.ini /usr/local/etc/php/

COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 80
CMD ["apache2-foreground"]
Run Code Online (Sandbox Code Playgroud)

但是我在使用 curl 的任何代码上都遇到了错误:

致命错误:调用未定义的函数 curl_init() in . . .

参考

基本 Dockerfile proadmin/php-5.3-apache 的链接

我试过的

  • 我试过安装php-curl而不是php5-curl,但 apt-get 没有找到php-curl
  • 根据此线程,我apt-utils在注意到安装警告后尝试安装。php5-curl
  • 我试图确保 PHP 5.3 正确引用了 php5-curl 模块,根据此评论
  • 我已经删除了所有 Docker 数据并从头开始重新构建映像。

我试过的任何东西都不起作用。总是同样的错误。

php docker php-curl

0
推荐指数
1
解决办法
3323
查看次数