CURL调用返回错误码56:代理CONNECT后返回HTTP 406,求解决方案
本次CURL请求用于生成用户令牌,令牌返回正常时用户可访问所有菜单,否则用户会被应用登出。当前调用返回错误:
Error Number: 56,Error String:Received HTTP code 406 from proxy after CONNECT。使用的CURL代码如下:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_PROXY, 'Proxy IP'); curl_setopt($ch, CURLOPT_POST, count($data)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_FAILONERROR, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $result = curl_exec($ch);外部服务器调用该CURL可正常获取令牌,但AWS云内服务器调用出现上述错误,请问遗漏了哪些配置或哪里存在问题?
可能的问题及解决方法
代理配置不完整
AWS云内服务器使用的代理可能需要额外认证或指定端口。当前仅设置了CURLOPT_PROXY,如果代理要求用户名密码,需添加CURLOPT_PROXYUSERPWD参数;如果代理使用非默认端口,要在IP后拼接端口,格式为Proxy IP:端口号。请求头触发406错误
406错误意味着服务器无法返回匹配客户端Accept头的内容。AWS环境下CURL的默认请求头可能和外部服务器不同,建议显式设置兼容的Accept头:curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*'));AWS安全组/NACL限制
检查AWS服务器所属的安全组和网络访问控制列表(NACL),确认已开放代理服务器端口、目标令牌服务器端口(通常是443)的出站权限。外部服务器不受AWS这些规则限制,所以能正常访问。代理拦截AWS源IP
部分代理会限制特定IP段访问,AWS云服务器的公网IP可能被代理拦截。联系代理管理员确认是否允许该AWS服务器IP访问代理服务。CURL版本或SSL配置差异
AWS服务器上的CURL版本、SSL证书配置可能和外部服务器不同。可以先临时添加SSL参数测试(生产环境不建议长期使用):curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);如果测试有效,再配置正确的CA证书路径。
内容的提问来源于stack exchange,提问作者Rajesh Kumar

