标签: http-get

带正文的 REST API HTTP GET

我实际上正在重写我们工作中的一些 API(在 ASP.Net Core 3.1 中),并尝试使它们成为 RESTFull。我遇到一些方法,应该使用 HTTP GET 调用它,因为它用于检索一些数据,但参数包装在一个相当大的 DTO 中。

所以我问自己如何应对:

  • 让它把 DTO 放在 URL 中,但是大小有什么限制呢?
  • 将正文放入 HTTP GET 请求中。我做了一些搜索,但发现的结果很旧。显然这是允许的,但当时不鼓励这样做
  • 使用 HTTP Post,但它不是 REST,因为应该使用 POST 来创建数据

我认为更好的解决方案是将 HTTP Get 与 body 一起使用(根据这篇文章https://thecodebuzz.com/http-get-delete-request-body-guidelines/这是可能的)

有人遇到同样的问题吗?现在的指导方针是什么?

谢谢你的想法

api rest http-get

9
推荐指数
2
解决办法
5万
查看次数

在URL中使用带有非法字符的HttpGet

我正在尝试使用DefaultHttpClient并向HttpGetWeb服务发出请求.遗憾的是,Web服务URL包含非法字符,例如{(例如:domain.com/service/{username}).很明显,Web服务命名不是很好,但我无法改变它.

当我这样做时HttpGet(url),我知道我在网址中有一个非法字符(即{和}).如果我在此之前对URL进行编码,则没有错误,但请求会转到不同的URL.

网址虽然有非法字符,但可以在浏览器中使用,但HttpGet实现不允许我使用它.我应该做什么或使用什么来避免这个问题?

java http http-get httpclient httpwebrequest

8
推荐指数
1
解决办法
2万
查看次数

使用HTTP GET请求,Swift动态转换失败

在使用RubyMotion创建应用程序之后,这是我第一次使用xCode在Swift中开发应用程序.

我使用以下代码从Rails API获取所有帖子,请求成功但解析JSON会出错.

代码:

func loadData() {
    let url = NSURL(string: "http://localhost:3000/api/posts")
    let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {(data, response, error) in
        var err: NSError?
        var json =  NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as NSDictionary
    })
    task.resume()
}
Run Code Online (Sandbox Code Playgroud)

错误:

libswift_stdlib_core.dylib`swift_dynamicCastObjCClassUnconditional:
0x103dbae20:  pushq  %rbp
0x103dbae21:  movq   %rsp, %rbp
0x103dbae24:  pushq  %rbx
0x103dbae25:  pushq  %rax
0x103dbae26:  movq   %rsi, %rcx
0x103dbae29:  movq   %rdi, %rbx
0x103dbae2c:  xorl   %eax, %eax
0x103dbae2e:  testq  %rbx, %rbx
0x103dbae31:  je     0x103dbae4d               ;     swift_dynamicCastObjCClassUnconditional + 45
0x103dbae33:  movq   0x72b66(%rip), %rsi       ; …
Run Code Online (Sandbox Code Playgroud)

http-get ios nsurlsession swift

8
推荐指数
1
解决办法
2050
查看次数

Web Api 2 - 如何从HTTPGET返回映像(来自Azure存储的MemoryStream)而不保存到磁盘?

我正在使用带有C#和Azure的Web Api 2,以及如何返回图像(从Memorystream基础)以便在页面上显示的问题...

这是我的Controller HTTPGET

[Route("api/PhotoSubmit/GetPhoto/{id}")]
    [HttpGet]
    public HttpResponseMessage GetPhotoById(int id)
    {
        StorageServices storage = new StorageServices();
        MemoryStream ms = storage.DownloadBlob(id);
        // return what ?
    }
Run Code Online (Sandbox Code Playgroud)

这是servicecall的开头:

$http({
            method: 'GET',
            url: 'api/PhotoSubmit/GetPhoto/' + $routeParams.id,
            accept: 'application/json'
        })
        .success(function(result) {
        // How do i handle the result and what HTML should i use ? <img ?
    });
Run Code Online (Sandbox Code Playgroud)

c# memorystream http-get angularjs asp.net-web-api2

8
推荐指数
1
解决办法
2万
查看次数

如何使用 Spring Boot 验证和清理 HTTP Get?

我不断从 Checkmarx 代码扫描仪收到这个烦人的错误,

Method getTotalValue at line 220 of src\java\com\example\PeopleController.java 
gets user input for the personName element. This element’s value then flows through
the code without being properly sanitized or validated and is eventually 
displayed to the user. This may enable a Cross-Site-Scripting attack. 
Run Code Online (Sandbox Code Playgroud)

这是我的代码。我想我做了所有必要的验证。还有什么???

@Slf4j
@Configuration
@RestController
@Validated 

public class PeopleController {

    @Autowired
    private PeopleRepository peopleRepository; 

    @RequestMapping(value = "/api/getTotalValue/{personName}", method = RequestMethod.GET)
    @ResponseBody
    public Integer getTotalValue(@Size(max = 20, min = 1, message = "person is not found") 
    @PathVariable(value="personName", required=true) …
Run Code Online (Sandbox Code Playgroud)

validation http-get spring-boot checkmarx

8
推荐指数
2
解决办法
3万
查看次数

URISyntaxException - 如何使用%处理网址

我是Java的新手,遇到了这个问题.我尝试过搜索但从未得到正确的答案.

我有一个字符串例如

String name = anything 10%-20% 04-03-07
Run Code Online (Sandbox Code Playgroud)

现在我需要建立一个带有这个String名称的url字符串,如下所示.

http://something.com/test/anything 10%-20% 04-03-07
Run Code Online (Sandbox Code Playgroud)

我尝试用%20替换空格,现在我得到了新的URL

http://something.com/test/anything%2010%-20%%2004-03-07
Run Code Online (Sandbox Code Playgroud)

当我使用这个url并在firefox中启动它时它工作正常但是在用Java处理它显然是在抛出

Exception in thread "main" java.lang.IllegalArgumentException
at java.net.URI.create(Unknown Source)
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
Caused by: java.net.URISyntaxException: Malformed escape pair at index 39 : 
at java.net.URI$Parser.fail(Unknown Source)
at java.net.URI$Parser.scanEscape(Unknown Source)
at java.net.URI$Parser.scan(Unknown Source)
at java.net.URI$Parser.checkChars(Unknown Source)
at java.net.URI$Parser.parseHierarchical(Unknown Source)
at java.net.URI$Parser.parse(Unknown Source)
at java.net.URI.<init>(Unknown Source)
... 6 more
Run Code Online (Sandbox Code Playgroud)

这是代码抛出错误

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
Run Code Online (Sandbox Code Playgroud)

url http-get

7
推荐指数
1
解决办法
1万
查看次数

httpClient.execute中的ClientProtocolException(httpget,responseHandler)

我使用以下代码从Web服务器请求xml:

HttpClient httpclient = new DefaultHttpClient()
try 
{
    HttpGet httpget = new HttpGet("http://63.255.173.242/get_public_tbl.cgi?A=1");              
    ResponseHandler responseHandler = new BasicResponseHandler();
    String responseBody = httpclient.execute(httpget, responseHandler);
    System.out.println(responseBody);
}
catch (ClientProtocolException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
} 
finally 
{
    httpclient.getConnectionManager().shutdown();
}

当我调用httpclient.execute(httpget,responseHandler)时,我得到一个clientProtocolException.url在Web浏览器中工作正常,它返回xml,浏览器显示它.

任何想法为什么我会得到一个clientProtocolException但浏览器处理它就好了?

编辑1:

查看协议异常,详细消息是:"服务器无法响应有效的HTTP响应".我无法更改我正在访问的Web服务器.有没有办法忽略这个并只是访问响应?

编辑2:

我发现服务器没有发回完整的标头.有没有办法访问响应的内容,即使返回一个损坏的标题?

编辑3:我编辑的IP地址是我正在打的真实IP地址.任何帮助将非常感激.

java android http http-get

7
推荐指数
1
解决办法
4万
查看次数

MVC [HttpGet]控制器注释可选吗?

如果我有2个控制器动作:

    [HttpGet]
    public ActionResult Login()
    {
        //...

        return View();
    }
Run Code Online (Sandbox Code Playgroud)

    [HttpPost]
    public ActionResult Login(FormCollection values)
    {
        //...

        return RedirectToAction("Index","Home");
    }
Run Code Online (Sandbox Code Playgroud)

似乎Post装饰是必需的(这很有意义),但HttpGet装饰完全是可选的.无论有没有,它都能正常工作.除非另有说明,否则MVC似乎将控制器操作默认为HttpGet.

我将不得不决定是否希望我的代码的未来读者必须自己解决这个问题,或者我是否想要记住在任何地方添加HttpGet以保持一致性.但我的问题不是关于包含明确的装饰是否是一个好的做法,即使它已经违约了.

我的问题是:总是这样我不需要用HttpGet来装饰控制器方法吗?如果我做或没有明确指定,有什么方法可以咬我吗?我已经搜索了这个但是我能找到的所有帖子都描述了为什么你可能想要使用两个注释而不是特别包含HttpGet的原因.

asp.net-mvc http-get http-post asp.net-mvc-controller

7
推荐指数
1
解决办法
3878
查看次数

Android Volley商店离线时请求

我已经搜遍了所有但没有找到答案.

在我的Android应用程序中,用户可以脱机使用该应用程序,并且某些事件会向我的服务器生成http GET请求.我正在使用Volley,当用户在线时,请求正常工作,但是脱机它们会立即失败并从请求队列中删除.

我希望Volley存储这些请求,并在服务器可访问时再试一次,或者至少继续尝试.这种行为可能吗?

这就是我做事的方式:

StringRequest request = new StringRequest(Request.Method.GET, url, listener, listener);
request.setRetryPolicy(new DefaultRetryPolicy(8000, 2, 1.5f));
postToDefaultQueue(request);

private void postToDefaultQueue (StringRequest request) {
    if (sQueue == null) {
        sQueue = Volley.newRequestQueue(mContext.get());
    }
    sQueue.add(request);
}
Run Code Online (Sandbox Code Playgroud)

非常感谢,任何帮助表示赞赏


编辑

所以我设法让请求在失败后返回队列.代码如下:

private class DummyListener implements Response.Listener<String>, Response.ErrorListener {
    String mUrl;
    public DummyListener (String url){
        mUrl = url;
    }
    @Override
    public void onErrorResponse(final VolleyError error) {
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                Log.v(DummyListener.class.getSimpleName(), "ErrorResponse", error);
                offlineStringGetRequest(mUrl);
            }
        }, 5000);
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

android offline http-get request android-volley

7
推荐指数
1
解决办法
1715
查看次数

“查询字符串参数”是标头的一部分吗?

在http1.1中,当我发出http GET请求:“ https://www.google.com/?name=jack ”时,我可以在chrome调试控制台中看到“查询字符串参数”: 在此输入图像描述

我的问题是:“查询字符串参数”是标头或正文的一部分还是两者都不是?我在HTTP1.1 规范中找不到有关“查询字符串参数”的定义。

rest get http http-get http-headers

7
推荐指数
1
解决办法
1万
查看次数