我想从该站点解析HTML ,我已经尝试使用:
但是结果是这样的:
然后我尝试使用php html解析器尝试PHP CURL ,我发现错误是SSL证书问题:无法获取本地颁发者证书
搜索答案后,然后我使用curl进行访问以访问https,并且尝试使用该文章中的步骤来获取证书,但结果是相同的
问题是,为什么解析结果是这样的?现在,我不知道该怎么办:(
我正在尝试使用 PHP 解码 REST 响应 (YouTrack-API) 的 gzipped 正文。似乎没有任何效果:
我尝试过 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 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)
我没有看到我的自定义标题。
非常感谢您的宝贵时间。
目标是为 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。
情况
我正在尝试调用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参数确实显示,但链接为空,如下所示。
我的 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) 我的代码如下,它与模型完美配合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 向 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) 我正在使用以下 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-curl ×8
php ×6
curl ×4
docker ×1
fitbit ×1
gpt-4 ×1
guzzle ×1
gzip ×1
html-parsing ×1
oauth-2.0 ×1
openai-api ×1
rest ×1
shopify ×1
shopify-api ×1
ssl ×1