无法从 java 中的缩短 url 扩展 url
Can't get expanded url from shortened url in java
我有以下代码扩展了缩短的 url。
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.Proxy;
import java.net.URL;
public class ExpandUrl {
public static void main(String[] args) throws IOException {
String shortenedUrl = "2q3GMg0"; //read note at the bottom.
String expandedURL = ExpandUrl.expand(shortenedUrl);
System.out.println("expanded url is : " + expandedURL);
}
public static String expand(String shortenedUrl) throws IOException {
URL url = new URL(shortenedUrl);
// open connection
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
int status = 0;
try {
status = httpURLConnection.getResponseCode();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("status is " + status);
// stop following browser redirect
httpURLConnection.setInstanceFollowRedirects(false);
// extract location header containing the actual destination URL
String expandedURL = httpURLConnection.getHeaderField("Location");
httpURLConnection.disconnect();
return expandedURL;
}
}
该代码扩展了一些 url,但 returns 对其他一些 url 为空。
例如:当我使用 9mglq8
时它会扩展 2q3GMg0
但 returns 为空,尽管为此状态代码为 200。我已经测试了两个 url。两者都是有效的并且具有扩展形式。
注意: Whosebug 不允许我将缩短的 link 放入 body,所以我刚刚提到了哈希码。
编辑: 我得到 null 的链接没有 Location
header 字段。在这种情况下,我如何检索原始扩展 link?
status is 200
Key: null value: [HTTP/1.1 200 OK]
Key: X-Cache value: [Hit from cloudfront]
Key: Server value: [Apache]
Key: Connection value: [keep-alive]
Key: Last-Modified value: [Sat, 12 May 2018 12:06:48 GMT]
Key: Date value: [Sat, 12 May 2018 12:11:30 GMT]
Key: Via value: [1.1 587a74dd892ff33ecf276aa569c8b68a.cloudfront.net (CloudFront)]
Key: X-Frame-Options value: [SAMEORIGIN]
Key: Accept-Ranges value: [bytes]
Key: Cache-Control value: [max-age=120, s-maxage=120, public]
Key: X-Amz-Cf-Id value: [-p1_VjHmvcGCI1PbQelSHpUectu_5NfCFUnPu_NUHCJ9_2lS2rTmlA==]
Key: Vary value: [Accept-Encoding]
Key: X-XSS-Protection value: [1]
Key: Content-Length value: [186539]
Key: Age value: [108]
Key: Content-Type value: [text/html]
我们将不胜感激任何形式的帮助。
可能是代理阻塞了。
编辑: 谁对此投了反对票:我尝试了两个 bit.ly URL,它们都工作正常。
如果状态代码是 200
,则没有重定向,header 中将没有 Location
字段,因此当您尝试访问值时返回 null Location
键。您可以使用 httpURLConnection.getURL()
获得扩展的 URL。
如果状态代码是 301
或 302
则存在重定向,并且 header 中将有一个 Location
字段。您可以获得重定向的 URL 为:
String expandedURL = httpURLConnection.getHeaderField("Location");
就像你所做的那样。
希望这对您有所帮助。
我有以下代码扩展了缩短的 url。
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.Proxy;
import java.net.URL;
public class ExpandUrl {
public static void main(String[] args) throws IOException {
String shortenedUrl = "2q3GMg0"; //read note at the bottom.
String expandedURL = ExpandUrl.expand(shortenedUrl);
System.out.println("expanded url is : " + expandedURL);
}
public static String expand(String shortenedUrl) throws IOException {
URL url = new URL(shortenedUrl);
// open connection
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
int status = 0;
try {
status = httpURLConnection.getResponseCode();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("status is " + status);
// stop following browser redirect
httpURLConnection.setInstanceFollowRedirects(false);
// extract location header containing the actual destination URL
String expandedURL = httpURLConnection.getHeaderField("Location");
httpURLConnection.disconnect();
return expandedURL;
}
}
该代码扩展了一些 url,但 returns 对其他一些 url 为空。
例如:当我使用 9mglq8
时它会扩展 2q3GMg0
但 returns 为空,尽管为此状态代码为 200。我已经测试了两个 url。两者都是有效的并且具有扩展形式。
注意: Whosebug 不允许我将缩短的 link 放入 body,所以我刚刚提到了哈希码。
编辑: 我得到 null 的链接没有 Location
header 字段。在这种情况下,我如何检索原始扩展 link?
status is 200
Key: null value: [HTTP/1.1 200 OK]
Key: X-Cache value: [Hit from cloudfront]
Key: Server value: [Apache]
Key: Connection value: [keep-alive]
Key: Last-Modified value: [Sat, 12 May 2018 12:06:48 GMT]
Key: Date value: [Sat, 12 May 2018 12:11:30 GMT]
Key: Via value: [1.1 587a74dd892ff33ecf276aa569c8b68a.cloudfront.net (CloudFront)]
Key: X-Frame-Options value: [SAMEORIGIN]
Key: Accept-Ranges value: [bytes]
Key: Cache-Control value: [max-age=120, s-maxage=120, public]
Key: X-Amz-Cf-Id value: [-p1_VjHmvcGCI1PbQelSHpUectu_5NfCFUnPu_NUHCJ9_2lS2rTmlA==]
Key: Vary value: [Accept-Encoding]
Key: X-XSS-Protection value: [1]
Key: Content-Length value: [186539]
Key: Age value: [108]
Key: Content-Type value: [text/html]
我们将不胜感激任何形式的帮助。
可能是代理阻塞了。
编辑: 谁对此投了反对票:我尝试了两个 bit.ly URL,它们都工作正常。
如果状态代码是 200
,则没有重定向,header 中将没有 Location
字段,因此当您尝试访问值时返回 null Location
键。您可以使用 httpURLConnection.getURL()
获得扩展的 URL。
如果状态代码是 301
或 302
则存在重定向,并且 header 中将有一个 Location
字段。您可以获得重定向的 URL 为:
String expandedURL = httpURLConnection.getHeaderField("Location");
就像你所做的那样。
希望这对您有所帮助。