为什么以下URL会在下面给出IIS错误:
A)http://192.168.1.96/cms/View.aspx/Show/Small+test '
A2)http://192.168.1.96/cms/View.aspx/Show/Small%20test '< - 这是有效的,但不是来自HttpUtility.UrlEncode()的结果
B)http://192.168.1.96/cms/View.aspx/Show/'%26 $%23funky**!!〜''+ page
A错误:
HTTP Error 404.11 - Not Found
The request filtering module is configured to deny a request that contains a double escape sequence.
Run Code Online (Sandbox Code Playgroud)
B错误:
HTTP Error 400.0 - Bad Request
ASP.NET detected invalid characters in the URL.
Run Code Online (Sandbox Code Playgroud)
/ Show /之后的URL的最后一部分是通过HttpUtility.UrlEncode()发送文本后的结果,因此,根据Microsoft,它是正确的URL编码.
如果我使用HttpUtility.UrlPathEncode()而不是HttpUtility.UrlEncode(),我得到A2结果.但B最终看起来像:
http://192.168.1.96/TVCMS-CVJZ/cms/View.aspx/Show/'&$#funky**!!〜''%20page
这仍然是错的.Microsoft是否知道如何对URL进行编码?是否有人编写过正确的方法来执行此操作?
编辑:
我写了自己的编码器:
static public string UrlEncode(string encode)
{
if (encode == null) return null;
string encoded = "";
foreach (char c …Run Code Online (Sandbox Code Playgroud) 我有一个标准的ASP.Net WebForms应用程序在IIS 7.0上运行,带有集成管理管道.我们网站上的许多图像都有文件名中的空格(例如'./baseball drawing.gif').当我们将这些图像放入我们的html页面时,我们会对路径进行编码,以便我们的html img标签看起来像这样<img src='./baseball%20drawing.gif' />
现在,当某些搜索引擎和webcrawler尝试索引我们的网站时,问题就出现了.当他们刮擦我们的页面时,他们将html编码我们已经html编码的路径获取像这样的图像链接'./baseball%2520drawing.gif',其中%25是'%'的url编码.这会导致两个问题:
你可以看到这是一个失败的局面.用户得到断开的链接,我们的错误日志中会出现噪音.
我一直试图找出如何纠正这个问题没有运气.这是我尝试过的:
<requestFiltering allowDoubleEscaping='true'>在web.config中设置以防止"404.11 URL Double Escaped error".这修复了第一个错误但导致了一个新错误,"发现了一个潜在危险的Request.Path".<httpRuntime requestPathInvalidChars>以防止"潜在危险的Request.Path"错误.这修复了第二个错误,但现在我们有第三个错误,"无法找到资源".Request.Path.看起来它的值是'Ball Image.gif'而不是'Ball%2520Image.gif'.在这种情况下,我不确定它为什么不起作用.我觉得我有一个超级黑客,我必须禁用一切,而不是真正理解为什么没有任何工作.所以我想我的问题是三折
任何人都可以提供任何帮助将不胜感激.
javascript的encodeURI函数是否有用?
据我所知,当您尝试发出HTTP请求时,您应该:
在第一种情况下,显然没有什么需要做的来请求它.注意:如果您确实想将其作为参数传递(例如?url = http ...),那么您实际上有第二种情况的实例恰好看起来像一个URI.
在第二种情况下,您应始终将unicode字符串转换为UTF-8,然后在将其添加到URI之前调用encodeURIComponent以转义所有字符.(如果您有UTF-8字节序列而不是unicode字符串,则可以跳过convert-to-utf8步骤).
假设我没有错过任何东西,我看不到encodeURI的有效用途.如果你使用它,很可能你构造了一个无效的URI,然后尝试在事后"消毒"它,这是不可能的,因为你不知道哪些字符是字面上的意图,哪些是打算转义的.
我已经看到很多反对使用escape()的建议,但是没有看到任何人阻止encodeURI.我错过了有效用途吗?
我正在写一个bash脚本,我试图提交一个post变量,但是wget将它视为多个URL我相信因为它不是URLENCODED ...这是我的基本思想
MESSAGE='I am trying to post this information'
wget -O test.txt http://xxxxxxxxx.com/alert.php --post-data 'key=xxxx&message='$MESSAGE''
Run Code Online (Sandbox Code Playgroud)
我收到错误并且alert.php没有得到post变量加上它很难说
无法解决我无法解决我无法解决尝试..等等.
我上面的例子是一个简单的有点sudo示例,但我相信如果我可以对其进行url编码,它会通过,我甚至尝试过像:
MESSAGE='I am trying to post this information'
MESSAGE=$(php -r 'echo urlencode("'$MESSAGE'");')
Run Code Online (Sandbox Code Playgroud)
但PHP错误..任何想法?如何在没有php执行的情况下传递$ MESSAGE中的变量?
我正在将一些代码从较旧的azure表存储客户端迁移到最新版本,并遇到了一个让我难以理解的问题:我似乎无法在分区密钥中发送带有单引号的查询而不会收到400错误请求.例如:
public class TestEntity : TableEntity
{
public string TestProperty { get; set; }
}
public class StorageTester
{
public static void TestInsert()
{
CloudStorageAccount acct = CloudStorageAccount.DevelopmentStorageAccount;
CloudTableClient client = acct.CreateCloudTableClient();
CloudTable table = client.GetTableReference("testtable");
table.CreateIfNotExists();
// insert a test entity -- this works fine
TestEntity entity = new TestEntity();
entity.PartitionKey = "what's up";
entity.RowKey = "blah";
entity.TestProperty = "some dataz";
TableOperation op = TableOperation.Insert(entity);
table.Execute(op);
// now query the entity -- explicit query constructed for clarity
string partitionFilter …Run Code Online (Sandbox Code Playgroud) 我需要从我的iPhone应用程序到谷歌文档进行HTTP发布.它适用于英语,但希伯来语出现了所有???????? 在谷歌文档中.
这就是我正在做的事情:
NSString *post = [Util append:@"&entry.xxxxx=", self.firstName.text, @"&entry.yyyyyyy=", self.phone.text, @"&entry.zzzzzzzz=", self.email.text, nil];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://docs.google.com/forms/d/FORM_ID/formResponse"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSHTTPURLResponse* urlResponse = nil;
NSError *error = [[NSError alloc] init];
[NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
为什么.NET for HttpUtility.UrlPathEncode for .NET 4.5 的文档说明
不使用; 仅用于浏览器兼容性.使用UrlEncode.
UrlEncode不会这样做,它为URL的参数部分编码字符串,而不是路径部分.有没有更好的方法来编码路径部分的字符串,为什么我不应该使用这个函数,这是在1.1以后的框架中工作?
我在我的Android应用程序中使用Retrofit作为我的网络层,但是我对URL编码有疑问.
我必须像这样调用REST API:
https://my_hostname.com/some_path?q=some_query¶m[0]=value1¶m[1]=value2&other_param=abcd
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,查询字符串由一些不同类型的参数组成,因此我决定@QueryMap在Retrofit Interface中使用注释,Map<String, String>其中where
q, param[1], param[0], other_param是地图的String键
我期待什么?我希望URL中的方括号用%5Bfor '['和%5Dfor 编码'[',但这不会发生.
为什么会这样?方括号应使用百分比编码进行编码.这是一个错误还是我做错了什么?我也尝试了@EncodedQueryMap没有差异的注释.
我正在根据C#中的RFC4648寻找base64url的(快速)标准实现.
我发现HttpServerUtility.UrlTokenEncode但看起来这并不遵循RFC4648(UrlTokenEncode在末尾添加一个数字,表示=已删除的符号数量;请参阅此处和此处).
例:
base64编码:
Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE ="
base64url编码:
HttpServerUtility.UrlTokenEncode(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE1",但我希望"QUE"
我有一个带URL的Kibana仪表板:
/logquery/app/kibana#/dashboard/Some-Dashboard?someParameters
Run Code Online (Sandbox Code Playgroud)
我有一个Web应用程序,我试图在上面嵌入仪表板<iframe>.Web应用程序中的URL如下所示
/dashboards/logquery/app/kibana#/dashboard/Some-Dashboard?someParameters
Run Code Online (Sandbox Code Playgroud)
在AngularJs中,我正在做:
ctrl.dashboardUrl = $location.url().replace('/dashboards', '');
Run Code Online (Sandbox Code Playgroud)
在我看来:
<div ng-controller="DashboardCtrl as ctrl">
<div class="iframe-container">
<iframe ng-src="{{ctrl.dashboardUrl | trustAsUrl}}"
height="100%"
width="100%"
ng-cloak
frameborder="0"
marginheight="0"
marginwidth="0"></iframe>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
trustAsUrl 过滤器如下:
filtersGroup.filter('trustAsUrl', [
'$sce',
function ($sce) {
return function (val) {
return $sce.trustAsResourceUrl(val);
};
}]);
Run Code Online (Sandbox Code Playgroud)
我有:
$locationProvider.html5Mode({
enabled: true,
requireBase: false,
rewriteLinks: false
});
Run Code Online (Sandbox Code Playgroud)
这会导致/后面的字符/kibana#与被替换%2F,并?有%3F导致Kibana没有能够找到所需的仪表板.
我怎么能克服这个?谢谢!
urlencode ×10
c# ×3
asp.net ×2
javascript ×2
url-encoding ×2
.net ×1
android ×1
angularjs ×1
azure ×1
base64 ×1
bash ×1
command-line ×1
encoding ×1
http-post ×1
iis-6 ×1
iis-7 ×1
java ×1
kibana ×1
linux ×1
objective-c ×1
retrofit ×1
validation ×1
wget ×1