Php Tinyurl API示例-我做得对吗:D
我们在应用程序中使用超长散列来注册新用户。问题是,这些散列在一些电子邮件客户端中断-使链接无法使用 我试着用一个简单的调用实现Tinyurl-API,但我认为它有时会超时。。。有时邮件无法送达用户 我更新了代码,但现在URL从未转换。Tinyurl真的这么慢还是我做错了什么?(我的意思是,嘿,在这个时候5秒是很重要的) 有人能给我推荐一种更可靠的服务吗 都是我的错,忘了一个假的。但我将把这个代码示例留在这里,因为我经常看到这个示例,我认为它的工作不太可靠:Php Tinyurl API示例-我做得对吗:D,php,api,tinyurl,Php,Api,Tinyurl,我们在应用程序中使用超长散列来注册新用户。问题是,这些散列在一些电子邮件客户端中断-使链接无法使用 我试着用一个简单的调用实现Tinyurl-API,但我认为它有时会超时。。。有时邮件无法送达用户 我更新了代码,但现在URL从未转换。Tinyurl真的这么慢还是我做错了什么?(我的意思是,嘿,在这个时候5秒是很重要的) 有人能给我推荐一种更可靠的服务吗 都是我的错,忘了一个假的。但我将把这个代码示例留在这里,因为我经常看到这个示例,我认为它的工作不太可靠: return file_get_con
return file_get_contents('http://tinyurl.com/api-create.php?url='.$u);
这是-我认为完全有效的样本。我想听听改进的情况
static function gettinyurl( $url ) {
$context =
stream_context_create(
array(
'http' => array(
'timeout' => 5 // 5 Seconds should be enough
)
)
);
// get tiny url via api-create.php
$fp = fopen( 'http://tinyurl.com/api-create.php?url='.$url, 'r', $context); // open (read) api-create.php with long url as get parameter
if( $fp ) { // check if open was ok
$tinyurl = fgets( $fp ); // read response
if( $tinyurl && !empty($tinyurl) ) // check if response is ok
$url = $tinyurl; // set response as url
fclose( $fp ); // close connection
}
// return
return $url; // return (tiny) url
}您可以试试这项服务。据我所知,它得到了谷歌的支持
我不知道您的哈希值到底有多长,但并非所有服务(浏览器、服务器等)都能处理长度超过255个字符的URL。您可以查看您可能希望用于
url
参数的
还建议检查fgets()
是否为false
。然后,只需将响应与空字符串进行比较,即可保存empty()
函数调用,如:
$line = fgets($fp);
if ($line !== false && $line !== '') {
// ...
}
通常,如果函数返回不同类型的值,例如integer
或boolean
,则建议首先检查所有内容是否为false
。这可能很关键,因为0
和false
在比较中的意思相同。由于PHP缺乏类型安全性,强烈建议始终检查类型是否相等。甚至在某些情况下,文件明确建议这样做,例如在以下情况下。同时,我强迫自己使用===
转换成==
,这和“!=”一样等等。它需要更多的输入,但绝对值得付出努力,因为你消除了可能的陷阱
我觉得您的代码的其余部分很好。如果您要立即将其缩短为7-8个字符的tinyurl,那么使用“超长哈希”有什么意义 没有人会费心去猜长的散列,而会去破解小馅饼
自己使用10个字符的散列,比现在更安全。这里是另一个版本:
function getTinyUrl($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL,'http://' . 'tinyurl.com/api-create.php?url=' . $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$tinyUrl = curl_exec($ch);
curl_close($ch);
if ($tinyUrl === false) {
throw new RuntimeException("Could not create URL");
}
return $tinyUrl;
}
我不得不拆分tinyurl,因为SO不允许我发布答案。一个示例哈希看起来像这样,总是小于160个字符。3c853e3f2e099cb16bddc7c:D5C9886CB31F789E3CDFFD55456FE26井。。。哈希的外观不在我的域中。我只需要发送一封包含哈希的工作电子邮件。开发人员的意图是在散列中隐藏一些信息,这样我们就可以重建用户想要注册的内容等等。。。还有一个组件是加密的,所以只要没有人发现密钥,我们的哈希就相当安全。我不确定我是否理解正确,但为什么Tinyurl更容易破解或更难破解?关于Tinyurl更容易破解——如果它们只有一个10个字符的模式跟踪键,那么猜测URL(并测试它们是否重定向到您的域)将比猜测一个长哈希容易得多。但考虑到长URL本身不在您的控制之下,很抱歉造成混乱…:)