私はある種のページスクレーパーを書いています。私がやろうとしていることの 1 つは、現在の URL を現在のページから抽出された URL フラグメントと結合することです。
このような:
if (WebPath.IsAbsolute(urlFragment))
links.Add(new Uri(urlFragment));
else
links.Add(new Uri(currentUrl, urlFragment));
簡単な方法 - このアプローチは、相対 Uris と絶対 Uris の両方で、ほとんどの場合に機能します。
ただし、一部のページはhttp://example.com/couple/of/folders/のように見え、URL フラグメントはcouple/of/otherfolders/です。そして、そこにあるすべてのブラウザは、それをhttp://example.com/couple/of/otherfoldersと解釈します。
もちろん、私のコードはhttp://example.com/couple/of/folders/couple/of/otherfoldersを生成します。これは、Uri の観点からは完全に正しいように見えますが、ブラウザがこれをどのように解釈できるかはわかりません。
さて、私はこの問題の解決策を探しましたが、2 つの URL を結合する方法を知らない人しか見つからなかったので、あまり解決できませんでした。私が見つけた最も近いものは、次の質問でした:ブラウザーと同じように、Java で URL フラグメントをどのように結合しますか? 、しかし答えは私の特定の問題に取り組んでいません。
私が欠けているものを誰か知っていますか?
編集 - これは IsAbsolute メソッドです (新しい Uri(link).IsAbsoluteUri に置き換える必要があることはわかっています):
public static bool IsAbsolute(string path)
{
var uppercasePath = path.ToUpper();
return uppercasePath.StartsWith("HTTP://") || uppercasePath.StartsWith("HTTPS://");
}