apache - 了解 HTTP 服务器和 lclient 如何理解请求的媒体类型
问题描述
我编写了一个 http4 客户端来将 Json 数据推送到将接受 http 请求或发布的服务器。现在,我的代码适用于某些系统而不适用于其他系统?我不知道问题出在哪里。它是服务器还是客户端。下面是对服务器的 POST 跟踪以及从服务器返回到客户端的响应。有人可以向我解释为什么这会失败吗?服务器是否告诉我它期待 JSON 以外的东西?谢谢你 !!!
我试过使用不同的标题,结果相同。我尝试以多部分表单数据媒体类型发送 CSV,这也失败了,响应相同????请注意响应,ACCEPT=multipart/form-data header THE POST REQUEST
setHeader[CamelHttpMethod, POST] -->
http4://apm-ts-query-svc-prod.app-api.aws-usw02-pr.px.io:443/v2/ts/upload?throwExceptionOnFailure=false <<< Pattern:InOnly,
Headers:{Authorization=Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImxlZ2FjeS10b2tlbi1rZXkiLCJ0eXAiOiJKV1QifQ.eyJqdGkiOiI0Zrzfo6VKOA,
breadcrumbId=ID-alfuse2i-35498-1557318510555-3-598, CamelAcceptContentType=application/json, CamelFileAbsolute=false,
CamelFileAbsolutePath=/app/PassThruMT1/jboss-fuse-6.3.0.redhat-310/g-dig/upload/Industries/J402_Motor_2019-05-02-11-00-00_0.csv, CamelFileLastModified=1557319009000, CamelFileLength=1538,
CamelFileName=Industries/J_Motor_2019-05-02-11-00-00_0.csv,
CamelFileNameConsumed=Industries/J_Motor_2019-05-02-11-00-00_0.csv,
CamelFileNameOnly=J_Motor_2019-05-02-11-00-00_0.csv, CamelFileNameProduced=g-dig/json/Industries/J_Motor_2019-05-02-11-00-00_0.csv, CamelFileParent=g-d/upload/Industries, CamelFilePath=g-dal/upload/Industries/J_Motor_2019-05-02-11-00-00_0.csv, CamelFileRelativePath=Industries/J_Motor_2019-05-02-11-00-00_0.csv, CamelHttpCharacterEncoding=UTF-8,
CamelHttpMethod=POST,
CamelHttpUri=https://apm-ts-ingestion-svc-prod.app-api.aws-usw02-pr.px.io/v2/ts/upload?throwExceptionOnFailure=false,
Content-Type=application/json, CUSTKEY=Industries, EXPIRY=2019-05-09 06:36:36.101, TENANT=676f31-752-40d-81-c80c5be, TOKEN=eyJhbGciOiJSUzI1NiIsImtpZeQ2eflqE5C3j44MvhPIR0bSEZgznonA503vrzfo6VKOA, UPLOADURL=https://apm-ts-ingestion-svc-prod.app-api.aws-usw02-pr.px.io/v2/ts/upload, x-ge-csvformat=ODB}, BodyType:String, Body:{
"tags" : [ {
"tagId" : "TI5925.PV",
"data" : [ {
"ts" : "2019-05-02T16:00:00",
"v" : "8.903611",
"q" : "3"
} ]
}, {
"tagId" : "TIA4562.PV",
"data" : [ {
"ts" : "2019-05-02T16:00:00",
"v" : "56.47153",
"q" : "3"
} ]
}, {
"tagId" : "XIA4596A.PV",
"data" : [ {
"ts" : "2019-05-02T16:00:00",
"v" : "3.335917",
"q" : "3"
} ]
}, {
"tagId" : "XIA4596B.PV",
"data" : [ {
"ts" : "2019-05-02T16:00:00",
"v" : "1.670584",
"q" : "3"
} ]
}, {
"tagId" : "TIA4561.PV",
"data" : [ {
"ts" : "2019-05-02T16:00:00",
"v" : "49.85203",
"q" : "3"
} ]
}, {
"tagId" : "XIA4595A.PV",
"data" : [ {
"ts" : "2019-05-02T16:00:00",
"v" : "2.098929",
"q" : "3"
} ]
}, {
"tagId" : "XIA4595B.PV",
"data" : [ {
"ts" : "2019-05-02T16:00:00",
"v" : "2.647079",
"q" : "3"
} ]
}, {
"tagId" : "TIA4565.PV",
... [Body clipped after 1000 chars, total length is 16321]
响应
log[HTTP4 Upload Response: ${body}] <<< Pattern:InOnly, Headers:{Accept=multipart/form-data, Authorization=Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImxlZ2FjeS10b2tlbi1rZXkiLCJ0eXAiOiJKV1QifQ.eyJqdGkiOiI0ZmYwY2UxZGFhN2E0N2U4ODIwA503vrzfo6VKOA, breadcrumbId=ID-alphprdfuse2i-35498-1557318510555-3-598, Cache-Control=no-cache, no-store, max-age=0, must-revalidate,
CamelAcceptContentType=application/json,
CamelFileAbsolute=false, CamelFileAbsolutePath=/app/PassMT1/jboss-fuse-6.3.0.redhat-310/tal/upload/Industries/J_Motor_2019-05-02-11-00-00_0.csv,
CamelFileLastModified=1557319009000, CamelFileLength=1538,
CamelFileName=Industries/J_Motor_2019-05-02-11-00-00_0.csv, CamelFileNameConsumed=Industries/J_Motor_2019-05-02-11-00-00_0.csv,
CamelFileNameOnly=J_Motor_2019-05-02-11-00-00_0.csv,
CamelFileNameProduced=g-dal/json/Industries/J_Motor_2019-05-02-11-00-00_0.csv, CamelFileParent=g-dal/upload/Industries,
CamelFilePath=g-dal/upload/Industries/J_Motor_2019-05-02-11-00-00_0.csv,
CamelFileRelativePath=Industries/J_Motor_2019-05-02-11-00-00_0.csv,
CamelHttpCharacterEncoding=UTF-8, CamelHttpMethod=POST,
CamelHttpResponseCode=415, CamelHttpResponseText=Unsupported Media Type,
CamelHttpUri=https://apm-ts-ingestion-svc-prod.app-api.aws-usw02-pr.px.io/v2/ts/upload?throwExceptionOnFailure=false, Connection=keep-alive,
Content-Length=0, Corr=4c4ffcb10fa7ef1c, CUSTKEY=Industries,
Date=Wed, 08 May 2019 12:38:27 GMT, Expires=0, EXPIRY=2019-05-09 06:36:36.101, Pragma=no-cache, Server=none, Strict-Transport-Security=max-age=31536000 ; includeSubDomains, TENANT=67626f31-75-43-81b-cc5bdbce, TOKEN=eyJhbGciOiJSUzI1NiIsI6GlLIGp8-HPeQ2eflqE5C3j44MvhPIR0bSEZgznonA503vrzfo6VKOA, UPLOADURL=https://apm-ts-ingestion-svc-prod.app-api.aws-usw02-pr.px.io/v2/ts/upload, X-Application-Context=APMTS:cloud:0, X-Content-Type-Options=nosniff, X-Frame-Options=DENY, x-ge-csvformat=ODB, X-Vcap-Request-Id=01d04cf7-47ae-4cf9-7d4c-357afe207769, X-Xss-Protection=1; mode=block}, BodyType:org.apache.camel.converter.stream.InputStreamCache, Body:[Body is instance of org.apache.camel.StreamCache]
解决方案
好吧,这正是我所怀疑的。事实证明,上传 URL 有 2 个不同的端点,其中 /upload 用于 CSV 数据多部分表单数据,而 /upload 则用于 JSON。所以,答案是肯定的。服务器在响应头中发回它期望的媒体类型。
https://apm-ts-ingestion-svc-prod.app-api.aws-usw02-pr.px.io/v2/ts/upload - CSV
https://apm-ts-ingestion-svc-prod.app-api.aws-usw02-pr.px.io/v2/ts - JSON
谢谢,希望这对其他人也有帮助。
推荐阅读
- java - 以错误的顺序显示消息
- go - 文件不是 `goimports`-ed 与 -local somePath
- android - 如何仅以 10% 的增量调用 NotificationManager
- wordpress - 如何将动画 gif 作为特色图像添加到 woocommerce 产品中?
- r - R 数据框 - 全部转换
为空白(“”)字符列 - python - 有没有办法按两个元素对两个元素元组的列表进行排序,但其中一个元素是反向排序的?
- javascript - Discord.js 数据库从 .txt 发送同一行
- neo4j - 带有时区的neo4j日期时间格式
- python - 如何在Python中对每一行Dataframe运行一个函数
- python - 将数据拆分为每 10 个实例并与新数据框连接