我正在尝试使用Apache Http组件4.5.1使用Instagram进行oauth登录,但未能成功获取访问令牌。
我很确定这是库本身的问题,因为如果我卷曲,我会得到我想要的结果。
所以,我尝试了几种不同的发布调用方式,但它们都给我相同的结果,所以我将发布我发现的最优雅的方式是使用Fluent-hc lib:
@Value("${instagram.client.id}")
private String clientID;
@Value("${instagram.client.secret}")
private String clientSecret;
@Value("${instagram.redirect.uri}")
private String redirectURI;
private static final String INSTAGRAM_ACCESS_TOKEN_URL = "https://api.instagram.com/oauth/access_token";
private Content requestAccessToken(String code, UserType userType) throws IOException {
// String authorization_header_string = URLEncoder.encode(clientID + ":" + clientSecret, "UTF-8");
return Request.Post(INSTAGRAM_ACCESS_TOKEN_URL)
.bodyForm(Form.form()
.add("client_id", clientID)
.add("client_secret", clientSecret)
.add("grant_type", "authorization_code")
.add("redirect_uri", redirectURI + "?type=" + userType)
.add("code", code)
.build())
// .addHeader("Authorization", authorization_header_string)
.execute().returnContent();
}
我得到的结果是:
Java语言网未知后异常:api。instagram。com:名称或服务未知java。网Inet6AddressImpl。lookupAllHostAddr(本机方法)java。网InetAddress$1。lookupAllHostAddr(InetAddress.java:922)java。网InetAddress。getAddressesFromNameService(InetAddress.java:1316)java。网InetAddress。getAllByName0(InetAddress.java:1269)java。网InetAddress。getAllByName(InetAddress.java:1185)java。网InetAddress。getAllByName(InetAddress.java:1119)org。阿帕奇。http。实施。conn.SystemDefaultDnsResolver。解析(SystemDefaultDnsResolver.java:45)组织。阿帕奇。http。实施。conn.DefaultHttpClientConnectionOperator。connect(DefaultHttpClientConnectionOperator.java:111)org。阿帕奇。http。实施。conn.poolighttpclientconnectionmanager。connect(poolighttpclientconnectionmanager.java:353)org。阿帕奇。http。实施。execchain。主要客户:。建立路由(MainClientExec.java:380)组织。阿帕奇。http。实施。execchain。主要客户:。执行(MainClientExec.java:236)org。阿帕奇。http。实施。execchain。ProtocolExec。执行(ProtocolExec.java:184)org。阿帕奇。http。实施。execchain。RetryExec。执行(RetryExec.java:88)组织。阿帕奇。http。实施。execchain。RedirectExec。执行(RedirectExec.java:110)组织。阿帕奇。http。实施。客户内部EHTTP客户端。执行(CloseableHttpClient.java:82)org。阿帕奇。http。实施。客户CloseableHttpClient。执行(CloseableHttpClient.java:55)org。阿帕奇。http。客户流利要求internalExecute(Request.java:173)组织。阿帕奇。http。客户流利要求执行(Request.java:177)HttpClient。doExecute(InternalHttpClient.java:184)org。阿帕奇。http。实施。客户CloseableHttpClient。执行(CloseableHttpClient.java:82)org。阿帕奇。http。实施。客户CloseableHttpClient。执行(CloseableHttpClient.java:55)org。阿帕奇。http。客户流利要求internalExecute(Request.java:173)组织。阿帕奇。http。客户流利要求执行(Request.java:177)
现在我不知道如何继续。我每次使用这个lib发出这个请求都会返回这个错误。尝试添加身份验证标头传递密钥:secret,但也不起作用。
我错过了什么?
附言:我在用docker。
您的代码示例似乎没有使用HttpComponents API。基于教程中的示例,我生成了此代码。它返回一个400响应,因为它实际上是一个错误的请求,但至少它得到了一个响应。
public class HttpClientExample {
private static final String INSTAGRAM_ACCESS_TOKEN_URL = "https://api.instagram.com/oauth/access_token";
public static void main(String[] args) throws IOException {
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair("client_id", "someValue"));
formParams.add(new BasicNameValuePair("client_secret", "someValue"));
formParams.add(new BasicNameValuePair("grant_type", "someValue"));
formParams.add(new BasicNameValuePair("redirect_uri", "someValue"));
formParams.add(new BasicNameValuePair("code", "someValue"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, Consts.UTF_8);
HttpPost post = new HttpPost(INSTAGRAM_ACCESS_TOKEN_URL);
post.setEntity(entity);
HttpClient client = HttpClients.createDefault();
HttpResponse response = client.execute(post);
System.out.println(response.getStatusLine());
System.out.println(response.getEntity());
}
}
好的。它确实与Docker有关。当我尝试在Docker之外运行代码时,它就工作了。
所以,我所做的是:
$ping api。instagram。com公司
PING instagram。c10r。facebook。com(173.252.120.81)56(84)字节的数据。
instagram-p3-shv-12-frc3中的64个字节。fbcdn。净(173.252.120.81):icmp\U序列=1 ttl=74时间=146毫秒
由于我使用docker-compose,我添加了我的common.yml配置:
extra_hosts:
- "api.instagram.com:173.252.120.81"
现在它工作得很好。
在AWS EC2 T2上部署停靠的Spring Boot应用程序时,我遇到了这个“java.net.UnknownHostException:host.docker.internal:Name或service not known”问题。微实例。由于此错误,spring启动应用程序无法启动。 但奇怪的是,我没有在应用程序的任何地方使用变量“host.docker.internal”:不在代码中,不在
问题内容: 我正在尝试使用httplib将信用卡信息发送到authorize.net。当我尝试发布请求时,得到以下回溯: 我这样建立我的请求: 要添加另一层,它正在我们的开发服务器上运行,该服务器具有httplib 2.6,并且在httplib.HTTPSConnection中没有source_address参数。 任何帮助是极大的赞赏。 =============================
我们有一个私人空间,并提供了一个内部API的访问权限,这样我们就可以从私人空间应用程序访问它。因此,我们开发了一个演示Java应用程序来测试它。当我们尝试用HTTP连接服务时,堆栈跟踪会像这样结束。 当我们ping私有空间中的相应IP时,我们可以看到它已启动。但是当我们试图从Java应用程序中访问服务时,它就像上面那样结束了。 Java 代码是这样的: 有没有人有任何想法来解决这个问题? 谢谢你。
问题可能是什么,如何解决?请帮帮我
我正在尝试运行一个电子邮件收割机,当我在没有循环的情况下手动输入url时,我没有任何连接错误。 然而,当我从文件中加载url时,我得到以下错误“名称或服务错误” 回溯(最近一次调用):文件“/usr/lib/python3/dist-packages/urllib3/connection.py”,第141行,在新连接(self.host,self.port),self.timeout,**extr
问题内容: 当我尝试将网页加载到终端时,它给出了错误。 我的PC上有互联网,并尝试通过家庭互联网连接。因此,我这里没有任何代理人参与。 并再次尝试,但并不幸运。 但是,如果我使用IP代替域名,则可以正常工作。 有什么线索吗? 问题答案: 问题是: 启用IPV6 DNS服务器错误 这是我的解决方法: IPV6禁用 开放终端 键入并输入登录为超级用户 输入root密码 键入将目录更改为 键入以在那里创