我正在尝试使用以下PHP代码连接到Tor隐藏服务:
$url = 'http://jhiwjjlqpyawmpjx.onion/'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050/");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);
print_r($output);
print_r($curl_error);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
无法解析主机名
但是,当我从Ubuntu中的命令行运行以下命令时:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
Run Code Online (Sandbox Code Playgroud)
我得到了预期的回复
PHP cURL文档说明了这一点:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
Run Code Online (Sandbox Code Playgroud)
我相信它从命令行工作的原因是因为Tor(代理)正在解析它识别的.onion主机名.在运行上面的PHP代码时,我的猜测是cURL或PHP正在尝试解析.onion主机名并且无法识别它.我已经搜索了一种告诉cURL/PHP让代理解析主机名的方法,但我找不到办法.
有一个非常类似的Stack Overflow问题,使用socks5代理的cURL请求在使用PHP时失败,但它通过命令行工作.
我在Windows上用ASP.NET编写了一个服务器应用程序,它提供了一个Web服务.
如何使用cURL在Linux中调用Web服务?
当我要实现Authorize.net支付网关时.但是,我收到了这个错误:
调用未定义的函数curl_init()
请让我知道它有什么问题.
有没有办法使用PHP获取cURL请求的标题和正文?我发现这个选项:
curl_setopt($ch, CURLOPT_HEADER, true);
Run Code Online (Sandbox Code Playgroud)
将返回身体加上标题,但后来我需要解析它以获取身体.有没有办法以更有用(和更安全)的方式获得两者?
请注意,对于"单个请求",我的意思是避免在GET/POST之前发出HEAD请求.
我正在尝试编写一个用于测试的bash脚本,它接受一个参数并通过curl将其发送到网站.我需要对值进行url编码,以确保正确处理特殊字符.做这个的最好方式是什么?
这是我到目前为止的基本脚本:
#!/bin/bash
host=${1:?'bad host'}
value=$2
shift
shift
curl -v -d "param=${value}" http://${host}/somepath $@
Run Code Online (Sandbox Code Playgroud) 如果我尝试将URL传递给包含括号的curl,则会失败并显示错误:
$ curl 'http://www.google.com/?TEST[]=1'
curl: (3) [globbing] illegal character in range specification at pos 29
Run Code Online (Sandbox Code Playgroud)
但是,如果我逃避两个括号,它似乎工作:
$ curl 'http://www.google.com/?TEST\[\]=1'
Run Code Online (Sandbox Code Playgroud)
有趣的是,我使用反斜杠逃脱只有第一托架它与错误代码20497默默地失败:
$ curl 'http://www.google.com/?TEST\[]=1'
$ echo $!
20497
Run Code Online (Sandbox Code Playgroud)
我的问题是如何解决一般情况?是否存在会自动转义URL的参数,或者在传递给curl之前需要转义的字符的描述?
我有一个REST端点作为
class LoginResource(restful.Resource):
def get(self):
print(session)
if 'USER_TOKEN' in session:
return 'OK'
return 'not authorized', 401
Run Code Online (Sandbox Code Playgroud)
当我尝试访问时
curl -v -b ~/Downloads/cookies.txt -c ~/Downloads/cookies.txt http://127.0.0.1:5000/
* About to connect() to 127.0.0.1 port 5000 (#0)
* Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.27.0
> Host: 127.0.0.1:5000
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 401 UNAUTHORIZED
< Content-Type: …Run Code Online (Sandbox Code Playgroud) 当服务器允许通过基本HTTP身份验证进行访问时,浏览器的预期体验是什么?
我通常只使用curl执行此操作:
curl -u myusername:mypassword http://somesite.com
Run Code Online (Sandbox Code Playgroud)
它工作得很好.但是,现在我无法访问curl(长篇故事),如果可能的话,我想从Web浏览器中进行操作.
我认为Basic Auth应该工作的方式是 - 我输入我想要的网址,服务器然后决定我没有被授权,返回响应代码401,我输入我的用户名和密码到提示符.如果它是正确的,页面加载!
但是,在somesite.com上,我根本没有获得授权提示,只是一个页面上写着我没有被授权.有些网站没有正确实现Basic Auth工作流程,还是我还需要做其他事情?
我正在尝试从脚本中的谷歌驱动器下载文件,我在这方面遇到了一些麻烦.我正在尝试下载的文件在这里.
我在网上看了很多,我终于设法让其中一个下载了.我得到了文件的UID和较小的(1.6MB)下载,但较大的文件(3.7GB)总是重定向到一个页面,询问我是否要在没有病毒扫描的情况下继续下载.有人可以帮助我通过那个屏幕吗?
这是我如何使第一个文件工作 -
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYeDU0VDRFWG9IVUE" > phlat-1.0.tar.gz
Run Code Online (Sandbox Code Playgroud)
当我在另一个文件上运行相同的时候,
curl -L "https://docs.google.com/uc?export=download&id=0Bz-w5tutuZIYY3h5YlMzTjhnbGM" > index4phlat.tar.gz
Run Code Online (Sandbox Code Playgroud)
我注意到链接中的倒数第三行,&confirm=JwkK其中有一个随机的4个字符串,但建议有一种方法可以向我的URL添加确认.我访问过的其中一个链接建议&confirm=no_antivirus但是这不起作用.
我希望有人可以帮忙解决这个问题!
提前致谢.