JAVA 中的 cURL 等效项

Posted

技术标签:

【中文标题】JAVA 中的 cURL 等效项【英文标题】:cURL equivalent in JAVA 【发布时间】:2010-09-12 02:42:03 【问题描述】:

我的任务是为开源 JAVA 应用程序编写身份验证组件。我们有一个使用https 的内部身份验证小部件。我有一些示例php 代码访问使用cURL 处理传输的widget

我的问题是是否有cURLJAVA 的端口,或者更好的是,什么基础包能让我足够接近来处理任务?

更新

简而言之,我想在 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 等效项的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 中的 cURL 等效项?

在 cURL 库中寻找等效的语法

如何使用 cacert 文件在 Powershell (Invoke-WebRequest) 中执行 cUrl 等效项?

将 cacert 卷曲到 Java HttpClient 等效项

C# 中的 Java Map 等效项

mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目