调用X-UI API更新入站数据后Xray启动失败求助
问题排查与修复方案
问题核心原因
从报错信息json: cannot unmarshal string into Go struct field DokodemoConfig.followRedirect of type bool可直接定位问题:
followRedirect字段被传入字符串类型的"true",但Xray的Dokodemo配置要求该字段为布尔类型(不带引号的true/false)。- 额外问题:
settings和sniffing被包裹成字符串(外层加了双引号),但X-UI API期望这两个字段是原生JSON对象,而非字符串。 - 次要问题:
settings中port的转义存在错误,数字类型无需转义。
修复后的PHP代码
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'http://'.$servers[$x].':27017/panel/api/inbounds/update/' . $inbound_id, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => '{ "enable": true, "remark": "'.$user_inb_remark_server.'", "listen": "", "port": '.$inbound_port.', "protocol": "dokodemo-door", "expiryTime": 0, "settings": {"address":"'.$inbound_address.'","port":'.$inbound_port.',"network":"tcp,udp","followRedirect":true}, "sniffing": {"enabled":false,"destOverride":["http","tls","quic","fakedns"]} }', CURLOPT_HTTPHEADER => array( 'Accept: application/json', 'Content-Type: application/json', 'Cookie: session=MTcxMjAxNDg1NXxEWDhFQVFMX2dBQUJFQUVRQUFCMV80QUFBUVp6ZEhKcGJtY01EQUFLVEU5SFNVNWZWVk5GVWhoNExYVnBMMlJoZEdGaVlYTmxMMjF2WkdWc0xsVnpaWExfZ1FNQkFRUlZjMlZ5QWYtQ0FBRUVBUUpKWkFFRUFBRUlWWE5sY201aGJXVUJEQUFCQ0ZCaGMzTjNiM0prQVF3QUFRdE1iMmRwYmxObFkzSmxkQUVNQUFBQUhfLUNIQUVDQVF0dFlYTjBaWEprYVhOamJ3RUtTRzlxYWtCMGNHMDNPQUE9fHcImxR8F1Brep_X3qMP1zUbqpcUc-XqKboczFcDIpJk' ), )); $response = curl_exec($curl); curl_close($curl); echo $response;
关键修改点
- 移除
followRedirect值的引号,将"true"改为true - 去掉
settings和sniffing外层的双引号,让它们直接作为JSON对象传递 - 修正
settings中port的转义错误,删除多余的反斜杠
内容的提问来源于stack exchange,提问作者Arash
相关产品推荐
相关产品推荐

