JAVA 中的 cURL 等效项
Posted
技术标签:
【中文标题】JAVA 中的 cURL 等效项【英文标题】:cURL equivalent in JAVA 【发布时间】:2010-09-12 02:42:03 【问题描述】:我的任务是为开源 JAVA
应用程序编写身份验证组件。我们有一个使用https
的内部身份验证小部件。我有一些示例php
代码访问使用cURL
处理传输的widget
。
我的问题是是否有cURL
到JAVA
的端口,或者更好的是,什么基础包能让我足够接近来处理任务?
更新:
简而言之,我想在 JAVA 中复制的代码:
$cp = curl_init();
$my_url = "https://" . AUTH_SERVER . "/auth/authenticate.asp?pt1=$uname&pt2=$pass&pt4=full";
curl_setopt($cp, CURLOPT_URL, $my_url);
curl_setopt($cp, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($cp);
curl_close($cp);
Heath,我认为你在正确的轨道上,我想我最终会使用 HttpsURLConnection,然后从响应中挑选出我需要的东西。
【问题讨论】:
【参考方案1】:省略异常处理:
HttpURLConnection con = (HttpURLConnection) new URL("https://www.example.com").openConnection();
con.setRequestMethod("POST");
con.getOutputStream().write("LOGIN".getBytes("UTF-8"));
con.getInputStream();
【讨论】:
您将如何为此添加基本身份验证? @BWelfel, con.setRequestProperty("授权", "基本 dXNlcm5hbWU6cGFzc3dvcmQ="); //用户名:密码base64编码con.setDoOutput(true)
?【参考方案2】:
我会使用Commons Http Client。项目中有一个contrib类可以让你使用ssl。
我们正在使用它,它运行良好。
编辑:这是SSL Guide
【讨论】:
更新:Commons HttpClient
项目现已终止,并已被Apache HttpComponents™
项目取代。【参考方案3】:
jsoup
jsoup 库获取 URL 作为其 html 抓取和解析职责的第一步。
Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
【讨论】:
【参考方案4】:尝试使用Apache Commons Net 获取网络协议。免费!
【讨论】:
这个库中没有 HTTP 客户端,这很遗憾,因为否则 Apache Commons 非常好(从 经验 说):commons.apache.org/net【参考方案5】:如果您需要比 Commons Net 提供的功能更多的功能,您也可以尝试 Apache 项目中的 [http://hc.apache.org/](HTTP Components)。
【讨论】:
【参考方案6】:您可以尝试 curl-to-java lib 将 curl php 代码转换为 java 代码https://github.com/jeffreyning/curl-to-java 这样的演示
public Object curl(String url, Object postData, String method)
CurlLib curl = CurlFactory.getInstance("default");
ch = curl.curl_init();
curl.curl_setopt(ch, CurlOption.CURLOPT_CONNECTTIMEOUT, 1000);
curl.curl_setopt(ch, CurlOption.CURLOPT_TIMEOUT, 5000);
curl.curl_setopt(ch, CurlOption.CURLOPT_SSL_VERIFYPEER, false);
curl.curl_setopt(ch, CurlOption.CURLOPT_SSL_VERIFYHOST, false);
String postDataStr = "key1=v1";
curl.curl_setopt(ch, CurlOption.CURLOPT_CUSTOMREQUEST, "POST");
curl.curl_setopt(ch, CurlOption.CURLOPT_POSTFIELDS, postDataStr);
curl.curl_setopt(ch, CurlOption.CURLOPT_URL, "https://xxxx.com/yyy");
Object html = curl.curl_exec(ch);
Object httpCode = curl.curl_getinfo(ch, CurlInfo.CURLINFO_HTTP_CODE);
if (httpCode != null && 200 == Integer.valueOf(httpCode.toString()))
return null;
return html;
【讨论】:
以上是关于JAVA 中的 cURL 等效项的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 cacert 文件在 Powershell (Invoke-WebRequest) 中执行 cUrl 等效项?