我试图在其正文中发送一个带有json对象的HTTP GET.有没有办法设置HttpClient HttpGet 的主体?我正在寻找相当于HttpPost#setEntity.
可能重复:
带请求正文的HTTP GET
我在这里看过几个不提倡通过HTTP GET发送内容的讨论.可以通过客户端(Web浏览器)发送的数据大小有限制.处理GET数据也取决于服务器.请参阅 以下资源部分.
但是,我被要求测试使用RestTemplate通过HTTP GET发送内容的可能性.我在春季论坛上几乎没有讨论,但没有回答.(请注意通过http Post发送数据工作正常).这里的讨论建议使用POST.
dev env - JBoss AS 5.1,Spring 3.1.3
客户
@Test
public void testGetWithBody()
{
// acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.TEXT_PLAIN);
// header
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
// body
String body = "hello world";
HttpEntity<String> entity = new HttpEntity<String>(body, headers);
Map<String, Object> uriVariables = new HashMap<String, Object>();
uriVariables.put("id", "testFile");
// Send the request as GET
ResponseEntity<String> result = restTemplate.exchange(
"http://localhost:8080/WebApp/test/{id}/body",
HttpMethod.GET, entity, String.class, …
Run Code Online (Sandbox Code Playgroud) 我想让我的客户直接与ElasticSearch REST API对话,显然阻止他们执行任何数据或配置更改.
我看了一下ElasticSearch REST接口,我注意到了这种模式:HTTP GET请求非常安全(无害查询和集群状态).
所以我认为我可以将Cloudfront用作仅允许GET/HEAD方法的CDN /代理(您可以将其限制在主配置中).
到目前为止一切都很好,一切都已成立.但事情不起作用,因为我需要向全世界开放我的EC2安全组才能从Cloudfront访问!我真不想要这个!
当我将EC2与RDS一起使用时,我可以简单地允许访问RDS安全组中的EC2安全组.为什么我不能使用CloudFront执行此操作?或者我可以吗?
想法?
编辑:它没有记录,但ES接受facets查询,它涉及(JSON)主体,不仅使用POST,还使用GET.这通过不忽略GET请求(源)的主体来简单地破坏HTTP建议(对于RFC3616 ).这是因为,正如所指出的那样,直接暴露ES REST接口可能导致使用复杂查询的轻松DOS攻击.我仍然相信,少一个代理仍然值得.
编辑:我另一个选项是跳过CloudFront的并增加了安全层作为ElasticSearch插件,如图点击这里
rest http amazon-web-services elasticsearch amazon-cloudfront
如何进行http get请求并传递json对象
这是我的json-Object
{{firstname:"Peter", lastname:"Test"}
Run Code Online (Sandbox Code Playgroud)
这个对象我想传递http请求以获得匹配人员列表.
这怎么可能?此示例仅显示带有json结果的简单get请求.我该如何修改它?
//Component:
person:Person;
persons:Person [];
....
//Whre can I pass the person, here in the service??
getMatchedPersons(){
this.httpService.getMatchedPersons().subscribe(
data => this.persons = data,
error => aller(error)
);
);
//SERVICE
//pass parameters?? how to send the person object here?
getMatchedPersons(){
return this.http.get('url').map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)
我正在设计一个API,我想知道在GET请求上发送JSON有效负载是否合适?
在这个其他问题的HTTP请求方法的有效载荷,我们可以根据这个链接找到:
这是否意味着我不应该发送带有效负载的GET请求? 这样做有风险吗?
我发现ElasticSearch在GET请求上使用了这样的有效负载:
$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?routing=kimchy' -d '{
"query": {
"filtered" : {
"query" : {
"query_string" : {
"query" : "some query string here"
}
},
"filter" : {
"term" : { "user" : "kimchy" }
}
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
因此,如果这个受欢迎的图书馆没有人抱怨,那么也许我可以做同样的事情吗?
顺便说一句,我想知道混合queryString参数和JSON有效负载是否可行?就像这个ElasticSearch查询一样.如果是这样,是否有规则,以便我们知道哪些参数应该是queryString参数或有效负载参数?
在这里我们可以阅读: 带有请求体的HTTP …
我需要从我的 Flutter 应用程序向 API 发出 GET 请求,该请求需要请求正文为 JSON(原始)。
我在 Postman 中使用 JSON 请求正文测试了 API,它似乎工作正常。
现在在我的 Flutter 应用程序中,我正在尝试做同样的事情:
_fetchDoctorAvailability() async {
var params = {
"doctor_id": "DOC000506",
"date_range": "25/03/2019-25/03/2019" ,
"clinic_id":"LAD000404"
};
Uri uri = Uri.parse("http://theapiiamcalling:8000");
uri.replace(queryParameters: params);
var response = await http.get(uri, headers: {
"Authorization": Constants.APPOINTMENT_TEST_AUTHORIZATION_KEY,
HttpHeaders.contentTypeHeader: "application/json",
"callMethod" : "DOCTOR_AVAILABILITY"
});
print('---- status code: ${response.statusCode}');
var jsonData = json.decode(response.body);
print('---- slot: ${jsonData}');
}
Run Code Online (Sandbox Code Playgroud)
但是 API 给了我一个错误说
{message: Missing input json., status: false}
如何在 Flutter 中为 Http GET 请求发送原始(或者更确切地说是 JSON)请求正文?
我正在考虑如何实现用于搜索的 REST API 端点。在我看来,对于如何实现搜索选项,我有四种选择,每种都有优点和缺点:
为了完整起见,以下是我想到的优点和缺点:
可以就其中哪一个最好进行冗长、细致和固执己见的讨论,但这种讨论不是这个问题的目的。相反,我会问:SEARCH 动词只是晦涩难懂且很少使用,但仍然是官方方法,还是非标准?
我找到了该方法的草案,但没有更多关于它的官方文档。该草案呼应了我上面提出的四难困境中的一些要点。在我看来,该方法仍然只是一个草案,不能称为“标准”,尽管我不太熟悉如何阅读这些文档。
从功能上来说,我想我的问题是:我可以依靠自称符合标准的软件来处理 SEARCH 方法吗?如果他们不处理,我可以诉诸他们声称符合标准来迫使他们处理吗?进一步归结起来,它是一个可靠的动词吗?
关于弹性搜索的非常基本的问题,文档没有非常清楚地回答(因为它们似乎涉及许多高级细节但却错过了基本细节!).
示例:范围查询
http://www.elasticsearch.org/guide/reference/query-dsl/range-query.html
不告诉如何通过搜索端点来执行范围?
如果是,那么如何通过查询字符串来做到这一点?我的意思是,我想做一个GET,而不是一个POST(因为它是一个查询,而不是一个插入/修改).但是,GET请求的文档并未告诉如何在Range示例中使用JSON:
http://www.elasticsearch.org/guide/reference/api/search/uri-request.html
我错过了什么?
谢谢
我被指派为应用程序开发WebAPI控制器(我之前从未使用过的东西).一切都很顺利,有一些基本的请求,如GetAllUsers(int id)只是出于测试原因 - 配置本身很好.
现在这是问题所在.我有一种方法
GetAllItems(Carrier carrier)
,其中Carrier是一个具有许多不同参数的类.由于我们已经在数据库中有一些Carrier实例用于测试目的,我尝试过查询数据库,根据ID(GUID)属性选择Carrier实例,但没有结果.
有没有办法在输入参数是对象时测试GET请求,而不是手动测试单个值(例如int ID),测试方法或某种测试输入参数?
编辑:感谢大家的反馈,我的问题的解决方案实际上比我预期的更容易解决.我绝对乐意给予好评的是你,虽然很遗憾我的名声太低这样做(我是新来的StackOverflow),所以我必须要回到在不久的将来的某个时候这样做.干杯:)
我如何在我的webservice中使用json参数,我可以使用@PathParam获取参数但是获取json数据作为参数不知道该怎么做.
@GET
@Path("/GetHrMsg/json_data")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces(MediaType.APPLICATION_JSON)
public String gethrmessage(@PathParam("emp_id") String empid) {
Run Code Online (Sandbox Code Playgroud)
}
用什么代替@PathParam以及以后如何解析它.