标签: curl

使用 cURL 将 Discord 消息发布到频道 - PHP

我目前正在尝试在我的 Discord 频道上发布一条消息,尝试使用 cURL POST 类型。我在运行代码时遇到的问题是它给了我一个 401 错误,说我未经授权。我正在使用 xampp localhost 在网络服务器上运行我的 PHP 代码。我还尝试通过 URL 链接(https://discordapp.com/oauth2/authorize?client_id=MYAPPLICATIONID&scope=bot&permissions=8)授权我的应用程序机器人,并成功地将机器人添加到我的频道中。看看我的代码

$data = array("Authorization: Bot" => $clientSecret, 'content' => 'Test Message');                                                                  
$data_string = json_encode($data);                       

$ch = curl_init('https://discordapp.com/api/v6/channels/'.$myChannel.'/messages');                                                                     
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                    
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$answer  = curl_exec($ch);

echo $answer;

if (curl_error($ch)) {
    echo curl_error($ch);
}
Run Code Online (Sandbox Code Playgroud)

我从应用程序页面获取 $clientSecret 以显示我的客户端秘密令牌,而 $myChannel 是我的不和谐频道/服务器 ID。

注意:我已经根据这里给出的另一个 stackoverflow 答案对我的代码进行了建模 discord php curl login Fail 。所以我不确定我是否为应用程序机器人使用了正确的语法

php curl discord

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

使用 cURL 和 PHP 登录 Facebook

我正在尝试使用 curl 访问 Facebook 登录页面。我的意图是登录到 facebook,然后做一些转义。由于最新的限制,我没有使用 facebook API……我需要抓取帖子的评论,而仅使用 API 是不可能的。

这是我的一些代码:

curl_setopt($ch, CURLOPT_URL,"https://web.facebook.com");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Run Code Online (Sandbox Code Playgroud)

我希望它重定向到登录页面,然后当用户填写登录表单时,我将获取凭据并使用它们重定向到主页并开始抓取。

无论如何,这就是我得到的:

我实际上是在 chrome 上运行这个...

php curl facebook screen-scraping web-crawler

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

GET curl 请求仅适用于邮递员,但不适用于 php

我正在尝试获取 html 作为响应,但它仅适用于邮递员而不适用于 php。在 php 中,我得到不同的响应,例如“出现问题...”

我错过了什么?

这是代码:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://www.avnet.com/shop/SearchDisplay?searchTerm=LMK316BJ476ML-T&countryId=apac&deflangId=-1&storeId=715839038&catalogId=10001&langId=-1&sType=SimpleSearch&resultCatEntryType=2&searchSource=Q&searchType=100&avnSearchType=all",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Cache-Control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
Run Code Online (Sandbox Code Playgroud)

邮递员回复

在此处输入图片说明

PHP响应

在此处输入图片说明

提前致谢。

php curl

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

在字符串中自动对查询参数进行 URL 编码是否明智?

假设我想使用以下请求curl

https://api.foobar.com/widgets?begin=2018-09-10T01:00:00+01:00&object={"name":"barry"}
Run Code Online (Sandbox Code Playgroud)

该字符串的 URL 编码版本如下所示:

https://api.foobar.com/widgets?begin=2018-09-10T01%3A00%3A00%2B01%3A00&object=%7B%22name%22%3A%22barry%22%7D
Run Code Online (Sandbox Code Playgroud)

当然,当我在命令行发出请求时,我更愿意查看外观更漂亮(但不是 URL 有效的)的第一个版本。我正在考虑使用一个bash脚本来拆分好的版本的不同部分,对相关部分进行编码,然后将其重新粘在一起,这样我就不必担心了。

例如,在对 , 进行几轮简单拆分?&=我可以轻松获得:

  • https://api.foobar.com/widgets
  • begin
  • 2018-09-10T01:00:00+01:00
  • object
  • {"name":"barry"}

之后,URL 对查询字符串的两个值进行编码并将它们全部粘在一起。我接受查询字符串中&和 的任何出现=都会破坏这种方法。

还有什么我应该担心的,可能会使这成为一个特别愚蠢的想法吗?

url bash curl url-encoding url-parameters

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

curl 命令在 shell 脚本中不起作用,但在站点上运行良好

我正在努力使用一个小的 bash shell 脚本,该脚本应该列出我的 csv 文件并使用 curl 将它们上传到外部服务。当我将我的命令变量回显到控制台并执行它时,我工作正常,但是当我在我的脚本中执行它时,它会抱怨额外的 qouta “

我的脚本看起来像这样

#!/usr/bin/bash
LOGDIR="/var/log/tyk/"
FILE_EXSTENSION_NAME="*.csv"
CURLCMD="curl -k -i -H"
PORT="9992"
ENDPOINT="/endpoint"
URL="https://localhost"



for i in `ls $LOGDIR$FILE_EXSTENSION_NAME`; do
    filename=`echo $i | awk -F "/" ' { print $5 }'`
    echo $filename
    CMD="$CURLCMD \"filename: $filename\" -F \"data=@$LOGDIR$filename\" $URL:$PORT$ENDPOINT"
    $CMD
done
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下输出

% Total    % Received % Xferd  Average Speed   Time    Time     Time     Current
                             Dload  Upload   Total   Spent    Left  Speed
 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--0curl: (6) Could …
Run Code Online (Sandbox Code Playgroud)

bash shell curl sh

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

Python SSL 错误握手

我有一个非常特殊的问题。特别是,我想检索以下网站的内容: https://www.mycardtamoil.it/

据我了解,该网站的 SSL 证书存在一些问题。如果您在 Chrome 中打开它,则没有问题,但是如果您尝试通过 cURL ( curl https://www.mycardtamoil.it/)检索内容,则会在 ssl 上收到错误,该错误可以使用该选项绕过-k

当我转向 Python3 时,我无法绕过这个问题;我测试过的代码是:

import requests
response = requests.get('https://www.mycardtamoil.it/', verify=False)
Run Code Online (Sandbox Code Playgroud)

但我得到以下期望:

-------------------------------------------------- ------------------------- SysCallError Traceback (最近一次调用最后一次) C:\ProgramData\Anaconda3\lib\site-packages\urllib3\contrib\ pyopenssl.py in wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname) 440 try: --> 441 cnx.do_handshake() 442 除了 OpenSSL.SSL.WantReadError:

C:\ProgramData\Anaconda3\lib\site-packages\OpenSSL\SSL.py in do_handshake(self) 1906 result = _lib.SSL_do_handshake(self._ssl) -> 1907 self._raise_ssl_error(self._ssl, result) 1908

C:\ProgramData\Anaconda3\lib\site-packages\OpenSSL\SSL.py in _raise_ssl_error(self, ssl, result) 1631 raise SysCallError(errno, errorcode.get(errno)) -> 1632 raise SysCallError(-1, "意外的 EOF") 1633 否则:

SysCallError: (-1, '意外的 EOF') …

python ssl curl python-3.x python-requests

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

使用curl下载谷歌存储桶对象的基于长期密钥/令牌的方法?

好的,我的开发人员和编码人员。上周我一直在尝试使用 Google (GCP) 云存储对象来解决这个问题。这是我的目标。

  1. 该解决方案需要轻量级,因为它将用于在 docker 图像中下载图像,因此需要 curl。
  2. GCP 存储桶和对象需要安全且不公开。
  3. 我需要一个“长期”存在的票证/密钥/client_ID。

我已经尝试了 Google 文档中提到的 OAuth2.0 设置,但每次我想设置 OAuth2.0 密钥时,我都没有选择“离线”访问。最重要的是,它需要您输入将访问身份验证请求的源 URL。

此外,谷歌云存储不支持 key= 像他们的其他一些服务一样。所以这里我有一个用于我的项目的 API KEY 以及一个用于我的服务用户的 OAuth JSON 文件,但它们没有用。

我可以得到一个 curl 命令来处理临时 OAuth 不记名密钥,但我需要一个长期的解决方案。

RUN curl -X GET \
    -H "Authorization: Bearer ya29.GlsoB-ck37IIrXkvYVZLIr3u_oGB8e60UyUgiP74l4UZ4UkT2aki2TI1ZtROKs6GKB6ZMeYSZWRTjoHQSMA1R0Q9wW9ZSP003MsAnFSVx5FkRd9-XhCu4MIWYTHX" \
    -o "/home/shmac/test.tar.gz" \
    "https://www.googleapis.com/storage/v1/b/mybucket/o/my.tar.gz?alt=media"
Run Code Online (Sandbox Code Playgroud)

允许我从任何位置下载 GCP 存储桶对象的长期密钥/ID/秘密。

authentication curl google-cloud-storage google-cloud-platform

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

将 cURL 响应重定向到 POST 的 cURL,但不通过文件

我想直接将 json 对象从 url(json) 发布到另一个 url

所以命令如下:

curl "<resource_link>.json" -o sample.json
curl -X POST "<my_link>" "Content-type: application/json" -d @sample.json
Run Code Online (Sandbox Code Playgroud)

我想避免这种情况,那么解决方案是什么?是这样的吗?

curl -X POST "<my_link>" "Content-type: application/json" -d "curl <resource_link>.json" 
Run Code Online (Sandbox Code Playgroud)

但它不起作用?此外,这个发布对另一个 cURL 命令的 Stream cURL 响应发布结果 并没有完全解释并且它不起作用是的,

卷曲

手册解释了“@”,但它没有解释如何使用另一个 curl 替代,如果我可以暂时将第一个 cURL 响应保存在某个地方并在另一个命令中使用它(但不在文件中)

bash curl response.redirect response request

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

使用 python 从 CURL 输出中解析 JSON

我正在尝试获取 id 的值,即“id”:59,它以 json 的形式出现在 curl 输出中。下面是 json 中的 curl 输出:

[{"id":59,"description":"This is a demo project","name":"Demo_Project","name_with_namespace":"sam / Demo_Project","path":"demo_project","path_with_namespace":"sam/demo_project","created_at":"2020-03-02T08:43:13.664Z","default_branch":"master","tag_list":[],"ssh_url_to_repo":"ssh://git@od-test.od.com:2222/sam/demo_project.git","http_url_to_repo":"https://od-test.od.com/gitlab/sam/demo_project.git","web_url":"https://od-test.od.com/gitlab/sam/demo_project","readme_url":"https://od-test.od.com/gitlab/sam/demo_project/blob/master/README.md","avatar_url":null,"star_count":0,"forks_count":0,"last_activity_at":"2020-04-09T09:28:09.860Z","namespace":{"id":2259,"name":"sam","path":"sam","kind":"user","full_path":"sam","parent_id":null,"avatar_url":"https://secure.gravatar.com/avatar/755db8ssqaq50dcc9d189c53523b?s=80\u0026d=identicon","web_url":"https://od-test.od.com/gitlab/sam"}}]
Run Code Online (Sandbox Code Playgroud)

我正在使用python来解析json并获取id的值。我已尝试使用以下命令执行相同操作,但出现错误。

curl --header "PRIVATE-TOKEN: 9999ayayayar66" "https://od-test.od.com/gitlab/api/v4/search?scope=projects&search=demo_project" | python -c 'import sys, json; print(json.load(sys.stdin)["id"])'
Run Code Online (Sandbox Code Playgroud)

错误:

错误

谁能帮我正确的python命令来获取id的值。提前致谢。

python json curl python-requests

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

命令行 cURL 工具在继续后失败时不会转储响应标头

我在 Linux 上有一个 24x7 监控脚本,它试图在顽皮的 HTTP 端点随机失败时进行捕获。 curl命令失败被记录。

我们的命令: $ curl --verbose --fail --location --cookie cookiejar.txt --header 'Content-Type: application/json' --header 'X-TOKEN: XYZ' --request POST --data @body.json --dump-header response_headers.txt --output response_body.txt https://example.com/search 2> stderr.txt

(有趣的是,此命令不会向 STDOUT打印任何内容。)

由于我们正在发布数据,因此curl添加了标准请求标头Expect: 100-continue。因此,服务器响应以: 开头HTTP/1.1 100 Continue,但随后以以下任一方式结束(出错):

  • HTTP/1.1 504 Gateway Timeout
  • HTTP/1.1 500 Internal Server Error

命令失败后,文件response_headers.txt太短(参见下面的示例)并且文件response_body.txt为空。此失败响应应返回标头和可选正文。如果我使用 Google Chrome 开发者工具,通常所有 HTTP 响应都有标头,包括错误 (5xx)。

问题:我是否遗漏了另一个curl命令参数来在继续失败时转储所有 HTTP 响应标头(和正文)?

我记得,在其他测试中,没有继续就失败的 HTTP GET …

curl

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