gpt4 book ai didi

java - http客户端的架构

转载 作者:行者123 更新时间:2023-12-01 13:58:12 25 4
gpt4 key购买 nike

我正在使用http客户端开发应用程序,我想提出一些优雅的问题。这是标准的java http客户端,它在后台线程中工作,并通过事件传递数据(通过重写方法实现)。我有一个用于后台请求的特殊类,它实现了 sendRequest() 方法

protected void sendRequest(final String url)  {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
URI website = null;
try {
website = new URI(url);
} catch (URISyntaxException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
HttpGet request = new HttpGet();
request.setURI(website);
HttpResponse response = null;
try {
response = client.execute(request, httpContext);
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
if (response != null)
{
HttpEntity entity = response.getEntity();
try {
InputStream is = entity.getContent();
if (Debug.isDebuggerConnected()==true)
{
String data = convertStreamToString(is);
int code = response.getStatusLine().getStatusCode();
if (httpEvent!=null)
httpEvent.HttpResponseArrived(data, code);
}
else
httpEvent.HttpResponseArrived(convertStreamToString(is),response.getStatusLine().getStatusCode());
}
catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
});
t.start();
}

还有子类,用于 API 到 Web 服务器,其中具有类似的方法:

public void getSomeData(SomeParams param)
{
sendRequest("http://xxx.yy"+gson.toJson(param));
httpEvent = new HttpHandler()
{
@Override
public void HttpResponseArrived(String data, int code)
{
switch (code)
{
case 200:
//some code
break;
case 401:
//some code
break;

}
}
};
}

我的问题:如何优雅地处理服务器错误,例如 401?我需要在一个地方执行此操作,即发送请求的方法 - sendRequest()。乍一看很简单:只需处理 401,如果是因为 cookie 过期,则调用方法 Login() (在我的设计中,它看起来像 getSomeData)。但我想要的不仅仅是再次登录,我还需要请求数据,但由于错误而未能获取数据。当然,我可以实现在每个开关中调用 Login() 方法,如下所示:

case 401:
{
Login(CurrentContext.AuthData.Login, CurrentContext.AuthData.Password);
break;
}

但是登录事件是在Login()方法中实现的;另外,我可以编写 sendRequest(string authdata),订阅 HttpHandler 并通过递归调用方法来实现此代码。但我认为,这不是一个很好的决定。我真的希望有人已经解决了这个问题,并且有办法将其变成漂亮的代码!谢谢,如果您能读到最后:)

最佳答案

至于答案不评论。尝试使用 http 客户端框架 - 我更喜欢 Apache HTTPClient。它提供对请求和响应的广泛控制。此外,它支持最常见的方法,如 GET POST 等。还提供 Cookie 管理、重定向处理和 SSL 支持。不要发明已经发明的东西。 HttpClient - use v4.x

关于java - http客户端的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com