【问题标题】:CURL PHP Object reference not set to an instance of an objectCURL PHP 对象引用未设置为对象的实例
【发布时间】:2020-08-19 02:55:34
【问题描述】:

我必须向第三方 API 发出 POST 请求。我是通过 CURL 来做的,我已经尝试了好几天,但我无法获得积极的回报。谁能评估我的代码是否正确? 我在 Insomnia 中测试了 API,我得到了反馈,但是在 php 中我只能得到那个反馈。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: '.$authorization, 'Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
$resu = (array) json_decode($output);
echo '<pre>';
var_dump($result);
echo '</pre>';

返回变量 $ return

字符串(4406) "{"ClassName":"System.NullReferenceException","Message":"Object 引用未设置为 对象。","数据":null,"InnerException":null,"HelpURL":null,"StackTraceString":" 在 Wangkanai.Detection.Collections.InternetExplorer..ctor(字符串 代理)\r\n 在 Wangkanai.Detection.BrowserResolver.GetBrowser()\r\n
在 lambda_method(Closure , ServiceProvider )\r\n at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(类型 服务类型)\r\n 在 Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)\r\n 在 lambda_method(Closure , IServiceProvider , Object[] )\r\n 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.c__DisplayClass4_0.b__0(ControllerContext 控制器上下文)\r\n 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.c__DisplayClass5_0.g__CreateController|0(ControllerContext 控制器上下文)\r\n 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态& next, Scope& 范围, Object& 状态, Boolean& isCompleted)\r\n at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__14.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__22.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext 上下文)\r\n 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(状态和下一个, 范围和范围、对象和状态、布尔值和 isCompleted)\r\n at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__17.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__15.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.d__7.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.d__3.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Advise.Start.Gateway.WebAPI.Startup.c.d.MoveNext() 在 D:\Agents\Agent01\_work\47\s\Advise.Start.Gateway.WebAPI\Startup.cs:line 84\r\n--- 堆栈跟踪从上一个异常位置结束 被抛出 ---\r\n 于 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext()","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":null,"HResult":-2147467261,"Source":"Wangkanai.Detection.Browser ","WatsonBuckets":null}"

解决办法:

curl_setopt($ch, CURLOPT_USERAGENT , "'Mozilla/5.0 (Windows NT 6.2; WOW64)  AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31'");

【问题讨论】:

  • 确保您知道在哪里使用$resu$result
  • $resu 返回为 NULL。我只是在测试
  • 您在响应中看到了什么 HTTP 状态代码?我感觉 $body 可能有问题,但无法确定。状态响应应该告诉您问题出在哪里。
  • 我得到的反馈是问题中的信息。而$body是一个写成字符串的json。

标签: php api curl


【解决方案1】:

问题解决了,我添加了 UserAgent

【讨论】:

  • 请提供您的解决方案,它可以帮助其他 SO 用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
相关资源
最近更新 更多