handler.Enqueue(async x =>
{
Assert.Equal(HttpMethod.Post, x.Method);
- Assert.Equal(new Uri("http://tinyurl.com/api-create.php"), x.RequestUri);
- Assert.Equal("url=http%3A%2F%2Fexample.com%2Fhogehoge", await x.Content.ReadAsStringAsync());
+ Assert.Equal(new Uri("https://tinyurl.com/api-create.php"), x.RequestUri);
+ Assert.Equal("url=http%3A%2F%2Fexample.com%2Fhogehogehoge", await x.Content.ReadAsStringAsync());
return new HttpResponseMessage(HttpStatusCode.OK)
{
};
});
- Assert.Equal(new Uri("http://tinyurl.com/hoge"),
- await shortUrl.ShortenUrlAsync(MyCommon.UrlConverter.TinyUrl, new Uri("http://example.com/hogehoge")));
+ Assert.Equal(new Uri("https://tinyurl.com/hoge"),
+ await shortUrl.ShortenUrlAsync(MyCommon.UrlConverter.TinyUrl, new Uri("http://example.com/hogehogehoge")));
Assert.Equal(0, handler.QueueCount);
}
handler.Enqueue(x =>
{
Assert.Equal(HttpMethod.Get, x.Method);
- Assert.Equal("http://ux.nu/api/short?format=plain&url=http:%2F%2Fexample.com%2Fhogehoge",
+ Assert.Equal("https://ux.nu/api/short?format=plain&url=http:%2F%2Fexample.com%2Fhogehoge",
x.RequestUri.AbsoluteUri);
return new HttpResponseMessage(HttpStatusCode.OK)
{
- Content = new ByteArrayContent(Encoding.UTF8.GetBytes("http://ux.nu/hoge")),
+ Content = new ByteArrayContent(Encoding.UTF8.GetBytes("https://ux.nu/hoge")),
};
});
- Assert.Equal(new Uri("http://ux.nu/hoge"),
+ Assert.Equal(new Uri("https://ux.nu/hoge"),
await shortUrl.ShortenUrlAsync(MyCommon.UrlConverter.Uxnu, new Uri("http://example.com/hogehoge")));
Assert.Equal(0, handler.QueueCount);
var text = "sm9";
var entities = new TwitterEntities();
- var expectedHtml = @"<a href=""http://www.nicovideo.jp/watch/sm9"">sm9</a>";
+ var expectedHtml = @"<a href=""https://www.nicovideo.jp/watch/sm9"">sm9</a>";
Assert.Equal(expectedHtml, Twitter.CreateHtmlAnchor(text, entities, quotedStatusLink: null));
}
- OpenTweenの古いバージョンの翻訳機能は 2019/4/30 以降に使用できなくなります
* CHG: 短縮URLの展開時にHTTPSが使用できるドメインは強制的にHTTPSを使用する
* CHG: 廃止された短縮URLサービスのドメインをURL展開の対象から削除
+ * CHG: 短縮URLで生成されるURLがHTTPSになるように変更
* CHG: 廃止された twurl.nl によるURL短縮機能を削除
* CHG: img.azyobuzi.net 利用時の接続先をHTTPSに変更
* CHG: 廃止されたサービスのサムネイル表示対応を削除
private async Task<Uri> ShortenByTinyUrlAsync(Uri srcUri)
{
// 明らかに長くなると推測できる場合は短縮しない
- if ("http://tinyurl.com/xxxxxx".Length > srcUri.OriginalString.Length)
+ if ("https://tinyurl.com/xxxxxxxx".Length > srcUri.OriginalString.Length)
return srcUri;
var content = new FormUrlEncodedContent(new[]
new KeyValuePair<string, string>("url", srcUri.OriginalString),
});
- using (var response = await this.http.PostAsync("http://tinyurl.com/api-create.php", content).ConfigureAwait(false))
+ using (var response = await this.http.PostAsync("https://tinyurl.com/api-create.php", content).ConfigureAwait(false))
{
response.EnsureSuccessStatusCode();
if (!Regex.IsMatch(result, @"^https?://"))
throw new WebApiException("Failed to create URL.", result);
- return new Uri(result.TrimEnd());
+ return this.UpgradeToHttpsIfAvailable(new Uri(result.TrimEnd()));
}
}
private async Task<Uri> ShortenByIsgdAsync(Uri srcUri)
{
// 明らかに長くなると推測できる場合は短縮しない
- if ("http://is.gd/xxxx".Length > srcUri.OriginalString.Length)
+ if ("https://is.gd/xxxxxx".Length > srcUri.OriginalString.Length)
return srcUri;
var content = new FormUrlEncodedContent(new[]
new KeyValuePair<string, string>("url", srcUri.OriginalString),
});
- using (var response = await this.http.PostAsync("http://is.gd/create.php", content).ConfigureAwait(false))
+ using (var response = await this.http.PostAsync("https://is.gd/create.php", content).ConfigureAwait(false))
{
response.EnsureSuccessStatusCode();
private async Task<Uri> ShortenByBitlyAsync(Uri srcUri, string domain = "bit.ly")
{
// 明らかに長くなると推測できる場合は短縮しない
- if ("http://bit.ly/xxxx".Length > srcUri.OriginalString.Length)
+ if ("https://bit.ly/xxxxxxx".Length > srcUri.OriginalString.Length)
return srcUri;
// OAuth2 アクセストークンまたは API キー (旧方式) のいずれも設定されていなければ短縮しない
EndUserApiKey = this.BitlyKey,
};
- return await bitly.ShortenAsync(srcUri, domain)
+ var result = await bitly.ShortenAsync(srcUri, domain)
.ConfigureAwait(false);
+
+ return this.UpgradeToHttpsIfAvailable(result);
}
private async Task<Uri> ShortenByUxnuAsync(Uri srcUri)
{
// 明らかに長くなると推測できる場合は短縮しない
- if ("http://ux.nx/xxxxxx".Length > srcUri.OriginalString.Length)
+ if ("https://ux.nu/xxxxx".Length > srcUri.OriginalString.Length)
return srcUri;
var query = new Dictionary<string, string>
["url"] = srcUri.OriginalString,
};
- var uri = new Uri("http://ux.nu/api/short?" + MyCommon.BuildQueryString(query));
+ var uri = new Uri("https://ux.nu/api/short?" + MyCommon.BuildQueryString(query));
using (var response = await this.http.GetAsync(uri).ConfigureAwait(false))
{
response.EnsureSuccessStatusCode();
// PostClass.ExpandedUrlInfo を使用して非同期に URL 展開を行うためここでは expanded_url を使用しない
text = TweetFormatter.AutoLinkHtml(text, mergedEntities, keepTco: true);
- text = Regex.Replace(text, "(^|[^a-zA-Z0-9_/&##@@>=.~])(sm|nm)([0-9]{1,10})", "$1<a href=\"http://www.nicovideo.jp/watch/$2$3\">$2$3</a>");
+ text = Regex.Replace(text, "(^|[^a-zA-Z0-9_/&##@@>=.~])(sm|nm)([0-9]{1,10})", "$1<a href=\"https://www.nicovideo.jp/watch/$2$3\">$2$3</a>");
text = PreProcessUrl(text); //IDN置換
if (quotedStatusLink != null)
public static string Shorten(string url)
{
//整形(http(s)://を削除)
- if (url.Length > 7 && url.Length < 128 && url.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
+ if (url.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
{
url = url.Substring(7);
}
+ else if (url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
+ {
+ url = url.Substring(8);
+ }
else
{
return url;
foreach (var nv in _nicovideo)
{
if (url.StartsWith(nv, StringComparison.Ordinal))
- return string.Format("{0}{1}", "http://nico.ms/", url.Substring(nv.Length));
+ return string.Format("{0}{1}", "https://nico.ms/", url.Substring(nv.Length));
}
var i = url.IndexOf("nicovideo.jp/user/", StringComparison.OrdinalIgnoreCase);
- if (i == 0 || i == 4) return string.Format("{0}{1}", "http://nico.ms/", url.Substring(13 + i));
+ if (i == 0 || i == 4) return string.Format("{0}{1}", "https://nico.ms/", url.Substring(13 + i));
i = url.IndexOf("nicovideo.jp/mylist/", StringComparison.OrdinalIgnoreCase);
- if (i == 0 || i == 4) return string.Format("{0}{1}", "http://nico.ms/", url.Substring(13 + i));
+ if (i == 0 || i == 4) return string.Format("{0}{1}", "https://nico.ms/", url.Substring(13 + i));
i = url.IndexOf("seiga.nicovideo.jp/watch/", StringComparison.OrdinalIgnoreCase);
- if (i == 0) return string.Format("{0}{1}", "http://nico.ms/", url.Substring(25));
+ if (i == 0) return string.Format("{0}{1}", "https://nico.ms/", url.Substring(25));
- return "http://" + url;
+ return "https://" + url;
}
}
}