php - 为什么这个 curl 函数获得权限被拒绝
问题描述
我正在尝试与 Kodi JSONRPC api 通信,但我一直被拒绝许可。
我到处寻找,我尝试了所有我能找到的 curl 选项,但它们似乎都没有做任何事情。
$options = array(
CURLOPT_VERBOSE => 1,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)),
CURLOPT_ENCODING => "",
CURLOPT_USERAGENT => "curl/7.65.1",
CURLOPT_POSTFIELDS => $data_string,
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$info = curl_getinfo($ch);
$content = curl_exec( $ch );
print_r($info);
echo $content;
我得到了一些令人不安的回应,我的 curl 请求如下所示:
Array
(
[url] => http://10.1.1.214:8080/jsonrpc
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => 0
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] =>
[primary_port] => 0
[local_ip] =>
[local_port] => 0
[redirect_url] =>
)
我的 error_log 看起来像这样:
* About to connect() to 10.1.1.214 port 8080 (#69)
* Trying 10.1.1.214...
* Failed to connect to 10.1.1.214: Permission denied
* couldn't connect to host at 10.1.1.214:8080
* Closing connection 69
命令行中的成功命令如下所示:
curl -v --data-binary '{"jsonrpc": "2.0", "method": "Application.GetProperties", "params": {"properties": ["version"]}, "id": 1}' -H 'content-type: application/json' http://10.1.1.214:8080/jsonrpc
* Trying 10.1.1.214:8080...
* TCP_NODELAY set
* Connected to 10.1.1.214 (10.1.1.214) port 8080 (#0)
> POST /jsonrpc HTTP/1.1
> Host: 10.1.1.214:8080
> User-Agent: curl/7.65.1
> Accept: */*
> content-type: application/json
> Content-Length: 105
>
* upload completely sent off: 105 out of 105 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Connection: Keep-Alive
< Content-Length: 116
< Content-Type: application/json
< Cache-Control: private, max-age=0, no-cache
< Accept-Ranges: none
< Date: Fri, 30 Aug 2019 02:02:17 GMT
<
* Connection #0 to host 10.1.1.214 left intact
{"id":1,"jsonrpc":"2.0","result":{"version":{"major":18,"minor":3,"revision":"newclock5_18.3-Leia","tag":"stable"}}}
解决方案
事实证明,问题在于 SELINUX 策略。
通过运行以下命令,它将解决问题
#setsebool -P httpd_can_network_connect=1
推荐阅读
- azure - CosmosDb 复杂排序
- powershell - Powershell,将 foreach 循环的输出与多个命令相结合
- bluetooth - 连接蓝牙设备的正确方法是什么?
- node.js - 使用 Rails 和 Docker 预编译资产失败:Webpacker 和 Node.js 版本问题。如何升级 docker 容器中的节点版本?
- javascript - 反应 useState 以更新其数组中的特定项目
- unit-testing - 使用 jest 和 vue-test-utils2 在 vue3 typescript 单元测试中模拟 axios(已解决)
- google-apps-script - 使用 google 站点 api 检索所有经典和新的 google 站点
- css - Webpack 正在删除 CSS 规则
- json - 如何使用角度和打字稿中的按钮更改json文件中的布尔值?
- ios - 将 Int Realm List 从 Objective-c 移植到 Swift