我正在向服务器执行POST请求,它会“正确”响应,但当尝试调用mergeFromString()
函数时,我收到以下错误:
Google\PROTOBUF\内部\GPBDecodeException:解析过程中发生错误:意外的线型。在Google\PROTOBUF\内部\Message.php第353行
我在PHP中使用CURL:
$handle = curl_init($url);
$curl_options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HEADER => true,
CURLOPT_VERBOSE => true
];
curl_setopt_array($handle, $curl_options);
$curlResponse = curl_exec($handle);
$responseMessage = new MyMessage();
$responseMessage->mergeFromString($curlResponse);
curl_close($handle);
var\u dump($curlResponse)的结果如下:
╔╔eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjI1MTQwMTAsInVzZXJuYW1lIjoiNTM1MTAyODA2MCIsInZlcnNpb24iOiIyMTgwNiJ9.Li-bp3bIPdIrsRhuTWEWToS0ds62VCG-a2PCGaKSrigڲօ═"
在纯文本中,它应该如下所示:
1: 1
2: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjI1MTQwMTAsInVzZXJuYW1lIjoiNTM1MTAyODA2MCIsInZlcnNpb24iOiIyMTgwNiJ9.Li-bp3bIPdIrsRhuTWEWToS0ds62VCG-a2PCGaKSrig
3: 1619765852
我的响应的原型文件如下:
message MyMessage{
// I'm only interested in property 2
string prop = 2;
}
环境:
"protobuf-php / protobuf": "^ 0.1.3",
"google / protobuf": "^ 3.16"
但是,使用Protoman(用于基于协议的消息的类似Postman的API客户端)的测试是成功的。我使用我在PHP中使用的相同原型文件进行了测试。
在这种情况下,错误是因为字符串无效
这是无效的,因为CURL返回的值(字符串)包括HTTP请求中的所有数据,例如:
HTTP/2 200
content-type: application/x-protobuf
date: Wed, 02 Jun 2021 23:12:37 GMT
content-length: 172
╔╔eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjI1MTQwMTAsInVzZXJuYW1lIjoiNTM1MTAyODA2MCIsInZlcnNpb24iOiIyMTgwNiJ9.Li-bp3bIPdIrsRhuTWEWToS0ds62VCG-a2PCGaKSrigڲօ═"
我没有注意到这一点,因为我认为这些细节是由于CURLOPT\u的冗长=
现在,如何从CURL返回的值中提取正文有点复杂,在这个问题中您将看到原因。
我的解决方案如下(我重复一遍,阅读我提到的问题,也许更简单的解决方案会适合你):
// I can't trust the Content-Length header (it may or may not be present).
// However, I can reliably calculate the length of the headers and use it instead.
$responseHeadersLength = 0;
$handle = curl_init($url);
$curl_options = [
// ...
CURLOPT_HEADERFUNCTION => function ($curl, $header) use (&$responseHeadersLength) {
$len = strlen($header);
$responseHeadersLength += $len;
return $len;
}
];
curl_setopt_array($handle, $curl_options);
$response = curl_exec($handle);
$body = trim(substr($response, $responseHeadersLength));
基本上,我正在youtube上做注册和登录教程。它使用的是旧版本的PHP,我试图更新代码,但出现以下错误: 分析错误:语法错误,在第23行的C:\Program Files(x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\Forum\Forum\core\functions\users.php中出现意外“,” users.php
我使用画布创建了这幅画,但在这样做之后,由于某种原因,我讨厌地在最左边的红色矩形之间出现一条黑线
当我用php创建一个类时,我遇到了这个错误: 一个简单的例子: 我已经看过Reference-PHP中这个错误意味着什么?但这似乎不符合我的情况。所有其他现存问题的问题似乎都依赖于一个旧的PHP版本。但是我用的是PHP 5.6.3! 我能做什么?我只是失明吗?
我在Heroku上托管了一个Springboot应用程序。构建和部署工作得非常好。然而,每当我想访问该方法时,我都会看到这个错误<代码>出现意外错误(类型=错误请求,状态=400) 如果我使用loclhost,但使用Heroku的应用程序时抛出错误,那么它在Postman上运行得非常好。 这是控制器的样子。我猜这就是问题的来源。 . 你认为我能做些什么让api在Heroku上工作?
我正在使用Flash和PHP创建一个JPG。我让Flash和PHP在本地主机服务器上按预期工作。当我上传到服务器时,出现以下错误: 分析错误:语法错误,在/home/carlosrg/public\u html/mysubdomain/image中出现意外的“:”。php在线6 以及守则: 提前感谢您的时间。
我正在尝试使用Spring Boot开发工具(Spring Remote),并将重新编译的文件自动上传到我的docker容器中。 我一直收到 这是我的docker文件: 这是我收到的错误: