我正在尝试对弹性搜索 api 执行 GET 请求,这是这种形式所需要的
GET /_search
{
"query": {
"more_like_this" : {
"fields" : ["title", "description"],
"like" : "Once upon a time",
"min_term_freq" : 1,
"max_query_terms" : 12
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用了request 但我找不到如何将正文添加到请求中。
有什么帮助吗?
我正在使用AWS SAM(Lambda和API网关)构建API,该合同的合同由第三方定义。
第三方使用主体中包含JSON的GET请求调用我的API。但是,将请求与正文发送到API时,CloudFront会拒绝该请求。
这是请求:
curl -X GET -H "Content-Type: application/json" --data '{"hello":"world"}' https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api
Run Code Online (Sandbox Code Playgroud)
这是响应:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD>
<BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Bad request.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: 1p0St_-e3noQL-2uMxeB_2I6lkMr1mg5afvxJRmVpCdnG67Vgnhj9w==
</PRE>
<ADDRESS></ADDRESS>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
检查日志后,该请求不会命中API网关或Lambda函数。但是,如果我从请求中删除主体,则它将触发Lambda函数,并且会从API中获得相应的错误消息(告诉调用方期望的主体丢失了。)
curl -X GET -H "Content-Type: application/json" https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api
Run Code Online (Sandbox Code Playgroud)
我正在通过SAM模板使用API网关的基本配置。这是相关的部分:
MyApiFunction:
Type: AWS::Serverless::Function
Properties: …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-cloudfront aws-lambda aws-api-gateway
此代码生成一个 POST 请求:
urllib2.urlopen("http://somedomain.com/", data)
Run Code Online (Sandbox Code Playgroud)
我想生成一个 GET 请求 - 关于如何做到这一点有什么想法吗?
谢谢您的帮助!
我知道你不应该发送带有正文的 HTTP GET 请求,但是 ceilometer web api 强迫我这样做。我正在开发一个 ceilometer scala 客户端,所以我需要一种 scala/java 方式来发出带有主体的 get 请求。到目前为止,我尝试使用 beeClient ( http://www.bigbeeconsultants.co.uk ) 和使用 httpConnection 的纯 Java,但出现 404 错误。在 curl 我可以通过这种方式实现结果:
curl -X GET -H "X-Auth-Token: ..long long token here.."
-H "Content-Type: application/json"
-d '{"q": [{"field": "resource", "op": "eq", "value": "gdfsf"}]}'
http://137.204.57.150:8777/v2/meters/
Run Code Online (Sandbox Code Playgroud)
那是我使用 java HttpURLConnection 的 Scala 代码:
import java.io._
import java.net._
val token = "myToken"
val url = new URL("http://137.204.57.150:8777/v2/meters/")
val body = "{\"q\": [{\"field\": \"resource\", \"op\": \"eq\", \"value\": \"gdfsf\"}]}"
val bodyLenght = …Run Code Online (Sandbox Code Playgroud) 是否可以使用 检索body内容express?
我开始尝试,body-parser但这似乎不适用于GET. 有没有可以工作的模块?
var express = require('express'),
bodyParser = require('body-parser'),
PORT = process.env.PORT || 4101,
app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.route('/')
.get(function(req, res) {
respond(req, res, 'GET body contents:\n');
})
.post(function(req, res) {
respond(req, res, 'POST body contents:\n');
});
app.listen(PORT, function(err) {
if (err) {
console.log('err on startup ' + err);
return;
}
console.log('Server listening on port ' + PORT);
});
/*
* Send a response back to …Run Code Online (Sandbox Code Playgroud) 首先,我知道有可以使用的模块(https://www.npmjs.com/package/elasticsearch),但我正在寻找一种方法来解决这个问题,使用 node.js 内置模块。
我正在寻找一种使用http模块在 nodejs 中执行以下 curl 请求的方法:
来源:https : //www.elastic.co/guide/en/elasticsearch/reference/2.4/search-count.html
curl -XGET 'http://localhost:9200/twitter/tweet/_count' -d '
{
"query" : {
"term" : { "user" : "kimchy" }
}
}'
Run Code Online (Sandbox Code Playgroud)
例如,使用请求正文发出请求。
我已经按照手册中的描述尝试编写帖子数据:https : //nodejs.org/api/http.html#http_http_request_options_callback
req.write(parsedData);
Run Code Online (Sandbox Code Playgroud) 我一直在研究如何实施以下内容:
我正在开发一个 RESTful Web API(使用 .Net Core 2.2)。我需要创建一个端点,消费客户端可以在其中向 API 发送一些文本,API 替换此文本中的一些标记,并将文本返回给消费客户端。
我认为客户端应该简单地执行 GET 请求,并在正文中包含文本。回复将是令牌替换后的新文本。然而,根据我的研究,似乎不应该在 GET 请求的正文中添加任何带有语义的内容。我不确定需要由 API 替换的具有某些标记的任意文本是否符合语义?我还看到它说“你不应该使用 GET 请求的正文来改变响应”。我想我在那里遇到了麻烦,因为取决于进入他体内的物质,会影响反应。
因此,我一直在努力找出执行此操作的正确方法。如果有人有指点,我将不胜感激。
谢谢。
如何将对象参数传递给 get 方法?我搜索了很多,例如如何将参数传递给asp.net web api get方法?
这里提到我们应该使用[FromUri],但我在.NET Core 2中看不到[FromUri]
[HttpGet]
public IHttpActionResult GetDetails([FromUri] RetrieveDetails eDetails)
{}
Run Code Online (Sandbox Code Playgroud)
以下是课程
public class RetrieveDetails
{
public string Name{ get; set; }
public string Type { get; set; }
public List<MoreDetails> MoreDetails { get; set; }
}
public class MoreDetails {
public string DetailName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但FromUri不能在.NET Core 2中使用
例如。我需要设计一个具有两个功能的 API:付款验证和付款创建。我需要两者,因为最终用户应该在实际确认付款创建之前知道一切正常。为了创造,我有
POST .../payment
Run Code Online (Sandbox Code Playgroud)
带有输入体。如果出现问题,它会返回 HTTP 400。
验证(或模拟)执行与创建完全相同的过程,在保存数据之前停止该过程。对于这个验证,最好有类似的东西
解决方案1
GET .../is-payment-ok
Run Code Online (Sandbox Code Playgroud)
还有一个输入体。它返回 HTTP 200,包括一个布尔值答案和一些细节。
这里的资源不是付款,而是关于付款有效性的信息,这对我来说似乎是 REST 兼容的。缺点是 API 的用户可能会感到困惑,因为如果付款无效,那么模拟将返回 HTTP 200(主体中的布尔值设置为false),而创建将返回 HTTP 400。
, 或者
解决方案2
POST .../payment?simulation=true , or
POST .../payment-simulation
Run Code Online (Sandbox Code Playgroud)
这里的 HTTP 响应代码与支付创建完全相同。缺点是我们使用 POST,实际上没有“发布”任何资源。
你会怎么做?这种情况下是否有 REST 规则或惯例?
我目前正在使用Google Cloud Run部署 API,尽管一切正常,但我现在很难理解我收到的错误。
\n我使用FastAPI在 python3 上创建了 API ,位置模型基于Pydantic\'s BaseModel。
\n为了说明这一点,我定义了一条测试路线,如下所示:
\nclass Location(BaseModel):\n lat: float\n lng: float\n\n\n@router.get(\'/test_404\')\nasync def test_404(origin: Location = Body(...),\n destination: Location = Body(...)):\n print(origin)\n print(destination)\n return {\'res\': \'ok\'}\nRun Code Online (Sandbox Code Playgroud)\n该路由应在请求正文中采用两个参数:起点和目的地,并且只有当我在本地部署它时才会这样做。\n这:
\nurl_local = "http://0.0.0.0:8080/test_404"\ndata = {\n \'origin\': {\'lat\': 104, \'lng\': 342},\n \'destination\': {\'lat\': 104, \'lng\': 342}\n}\nresp = requests.get(url_local, json = data)\nprint(resp.text)\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n\'{"res":"ok"}\'\nRun Code Online (Sandbox Code Playgroud)\n当我在 Cloud Run 上部署相同的服务时,就会出现问题。我的所有其他路线都工作正常,但以下是当我将上面的代码与容器 url 一起使用时得到的输出:
\n <!DOCTYPE html>\\n\n <html lang=en>\n <meta charset=utf-8>\n …Run Code Online (Sandbox Code Playgroud) python-3.x google-cloud-platform pydantic google-cloud-run fastapi
get ×3
node.js ×3
request ×2
rest ×2
api ×1
aws-lambda ×1
body-parser ×1
express ×1
fastapi ×1
http ×1
http-post ×1
java ×1
javascript ×1
post ×1
pydantic ×1
python ×1
python-3.x ×1
scala ×1
urllib2 ×1