java创建HttpURLConnection连接并获取返回值

本文档展示了如何在Java中使用HttpURLConnection发送POST请求,并处理返回的响应。通过建立连接,设置请求方法为POST,添加请求头以处理cookie进行身份验证,以及读取响应数据,实现了HTTP请求的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public String getSourceData(HttpServletRequest request){
String urlStr = "http://xxx";
String data = "";
BufferedReader read = null;// 读取访问结果
URL url = new URL(urlStr); 
//打开链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
        conn.setDoOutput(true);
conn.setDoInput(true); 
//设置cookie,若无需求可忽略 start
Cookie cookies[] = request.getCookies(); 
if(cookies!=null){
StringBuffer sb = new StringBuffer();
for(Cookie c:cookies){
sb.append(c.getName());
sb.append("=");
sb.append(c.getValue());
sb.append(";");
}
conn.setRequestProperty("Cookie",sb.toString());

//设置cookie,若无需求可忽略 end
PrintWriter printWriter = new PrintWriter(conn.getOutputStream());
printWriter.flush();
BufferedReader in = null;
StringBuilder sb = new StringBuilder();
try {
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "GBK"));
String str = null;
while ((str = in.readLine()) != null) {
sb.append(str);
}
} catch (Exception ex) {


} finally {
try {
conn.disconnect();
if (in != null) {
in.close();
}
if (printWriter != null) {
printWriter.close();
}
} catch (IOException ex) {
}
return  sb.toString();
}

本人此处设置cookie的原因是因为访问的地址是当前项目的一个方法,而该方法中需要进行身份验证,如果没有登录的话就会跳转到登录页面登录。

而使用HttpURLConnection创建的是一个全新的链接,不会有当前request的请求头,因此想要继承当前request的header的话就要对conn进行设置。


### 获取HTTP响应的返回值 在不同编程语言和技术栈中,获取HTTP响应的方式有所不同。以下是几种常见方式: #### Java获取 HTTP 响应的内容长度和正文 对于Java而言,在建立`HttpURLConnection`连接之后,可以通过调用相应的方法来取得服务器端传回的信息,包括状态码以及实体内容等。 ```java // 创建URL对象打开连接 URL feedurl = new URL("http://example.com"); HttpURLConnection con = (HttpURLConnection) feedurl.openConnection(); // 设置请求方法为GET con.setRequestMethod("GET"); // 获得响应码 int responseCode = con.getResponseCode(); System.out.println("Response Code : " + responseCode); // 如果成功,则读取输入流中的数据 if(responseCode == HttpURLConnection.HTTP_OK){ BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer content = new StringBuffer(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } // 关闭资源 in.close(); System.out.println("Response Content : " + content.toString()); } ``` 上述代码展示了如何创建一个到指定网址的连接通过检查响应的状态码是否等于 `200 OK` 来确认请求的成功与否;如果确实如此,则进一步解析来自服务端的数据[^1]。 #### 使用 Spring WebFlux 的 WebClient 进行异步非阻塞式的 HTTP 请求 当采用反应式编程模型时,Spring Framework 提供了一个名为WebClient的强大工具来进行网络通信。下面的例子说明了怎样利用`.retrieve()` 方法加上 `.bodyToMono(String.class)` 将响应体转换成单一的结果集,同时还能借助于`.onErrorResume(...)`实现异常处理机制。 ```java import org.springframework.web.reactive.function.client.WebClient; public class Example { public static void main(String[] args) throws InterruptedException { WebClient client = WebClient.create("https://jsonplaceholder.typicode.com"); Mono<String> resultWithFallback = client.get() .uri("/posts/1") .accept(MediaType.APPLICATION_JSON) .exchangeToMono(clientResponse -> clientResponse.bodyToMono(String.class)) .onErrorResume(WebClientResponseException.class, ex -> Mono.just("{\"title\":\"default\",\"body\":\"fallback\"}")) ; StepVerifier.create(resultWithFallback.log()) .expectNextCount(1).verifyComplete(); } } ``` 此片段演示了即使遇到特定类型的错误也能平滑地提供备用方案的能力[^2]。 #### Python Tkinter 应用程序内的回调函数设计模式 针对希望构建图形界面应用的新手开发者来说,Python内置模块Tkinter提供了简单易懂的方式来定义窗口组件及其交互行为。为了使某个按钮点击事件触发的动作影响整个应用程序的状态或者共享某些变量给其他部分访问,可以考虑如下做法之一——将目标属性设置为类实例成员而非局部作用域内声明。 ```python from tkinter import * class App(Frame): def __init__(self,master=None): super().__init__(master=master) self.pack() self.filename="" button = Button(self,text='Choose File',command=self.choose_file) button.pack(side=BOTTOM) def choose_file(self): from tkinter.filedialog import askopenfilename # 更新实例级别的 filename 属性而不是仅限于此处的作用范围 self.filename = askopenfilename(initialdir="/", title="Select file", filetype=(("jpeg files","*.jpg"), ("all files","*.*"))) print(f'Selected Filename: {self.filename}') root=Tk() app=App(master=root) app.mainloop() ``` 这里的关键在于把想要持久化的数据项作为类的一部分管理起来,从而使得它们可以在不同的地方被方便地引用和修改[^4]。 #### C++ MessageBox 函数的应用场景分析 最后提及一点关于Windows平台特有的消息框控件MessageBox API的知识点。该API允许程序员弹出一个小对话框显示提示信息给最终用户看,等待其做出回应(比如按下OK键)。值得注意的是,此类别的函数会有一个整数值形式的输出参数用来指示具体发生了什么事情,例如哪个按钮被按下了等等。因此,编写者应当依据实际需求去解读这些反馈以便采取后续行动[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值