Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 特定网站的基本NSURLSession用法_Ios_Swift_Post_Nsurlsession - Fatal编程技术网

Ios 特定网站的基本NSURLSession用法

Ios 特定网站的基本NSURLSession用法,ios,swift,post,nsurlsession,Ios,Swift,Post,Nsurlsession,我几乎不好意思问,但我正试图为自己构建一个小应用程序,而我却被错综复杂的网络技术绊倒了 我需要帮助的不是Swift,更重要的是方法学 我正在按程序登录这里 这只是一个英国网站,让你检查你的旅行卡余额 我不喜欢网络内容,但我相信我需要点击的帖子URL是: (从查看页面开始) 但是,下面的代码只是不断返回一个200 OK,但是web服务器出现一个错误,表示该页面不可用。当然这个网站只是一个简单的通过POST登录 任何洞察都将是伟大的——哪怕只是一个指向正确方向的指针谢谢。。。目前的方法如下: fun

我几乎不好意思问,但我正试图为自己构建一个小应用程序,而我却被错综复杂的网络技术绊倒了

我需要帮助的不是Swift,更重要的是方法学

我正在按程序登录这里

这只是一个英国网站,让你检查你的旅行卡余额

我不喜欢网络内容,但我相信我需要点击的帖子URL是: (从查看页面开始)

但是,下面的代码只是不断返回一个200 OK,但是web服务器出现一个错误,表示该页面不可用。当然这个网站只是一个简单的通过POST登录

任何洞察都将是伟大的——哪怕只是一个指向正确方向的指针谢谢。。。目前的方法如下:

func login() {

    var user = "myUsername"
    var pass = "myPassword"

    var config = NSURLSessionConfiguration.defaultSessionConfiguration()
    config.allowsCellularAccess = true


    var connection = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)

    var request = NSMutableURLRequest(URL: NSURL(string: "https://oyster.tfl.gov.uk/oyster/security_check")!)
    request.HTTPMethod = "POST"

    var params = "username=\(user)&password=\(pass)"

    var err: NSError?

    request.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")


    connection.dataTaskWithRequest(request, completionHandler: {

        (data : NSData!, response : NSURLResponse!, error : NSError!) in


        var dataString = NSString(data: data, encoding: NSUTF8StringEncoding)


        println(response)
        println(dataString)



    }).resume()
}

查看登录页面的HTML,可以看到以下几点:

  • 您可能需要确认
    用户名
    密码
    字段名的大小写。有时web服务区分大小写

  • 如果查看HTML中的表单,表单上还有其他字段。您可能希望发送该登录表单中存在的所有字段(即使它们在web浏览器中不可见)

    虽然这里似乎不是这样,但有时这些字段是动态生成的,您实际上必须首先请求登录html页面,解析出这些字段,并将它们包含在您的请求中

  • 您可能希望使用类似的工具观看web浏览器的交互。您可能希望尽可能忠实地再现请求

  • 在构建请求主体时要小心。通常,必须对值进行百分比转义。例如,如果密码包含保留字符,如
    +
    &
    ,则此代码将不起作用。在您的测试中可能不是这样,但这是一件值得警惕的事情

  • 您可能需要查看此服务的服务条款,因为它们有时禁止与web服务器进行编程交互。你不想违背他们的条款和条件。更重要的是,你不希望用户使用你的应用违反服务条款

    您可能还希望与web服务器提供商联系,查看他们是否有经批准的API来执行您尝试执行的任务


  • 在该网页上,文章需要几个额外的参数:这些参数隐藏在HTML中。我认为您需要提供所有必需的参数才能使其正常工作

    清单似乎是:

    ReturnUrl=”https://oyster.tfl.gov.uk/oyster/security_check"

    AppId=“8ead5cf4-4624-4389-b90c-b1fd1937bf1f”

    UserName=“”

    Password=“”

    注意用户名和密码的名称中有大写字母

    试着使用全部4个,看看你进展如何。没有在这上面花太多时间,所以可能错过了一些东西

    var params = "ReturnUrl=https://oyster.tfl.gov.uk/oyster/security_check&AppId=8ead5cf4-4624-4389-b90c-b1fd1937bf1f&UserName=\(user)&Password=\(pass)"
    
    您可能会发现使用UIWebView和使用javascript填写表单并执行登录按钮更简单。登录完成后,您可以使用javascript删除任何需要的数据。这样,您就可以简单地自动化用户在其标准web页面上的交互。通过此功能,如果显示WebView,您还可以查看正在发生的事情。您还可以从处理所有重定向、脚本等的WebView中获益,这些重定向、脚本等都需要运行才能正常工作

    e、 g.要设置用户名和密码并登录,您需要在WebView中使用javascript运行的所有操作如下:

    username=document.getElementById("UserName");
    username.value="<put in your username>";
    password=document.getElementById("Password");
    password.value="<put in your password>";
    signinbutton=document.getElementsByName("Sign in")[0];
    signinbutton.click();
    
    username=document.getElementById(“用户名”);
    username.value=“”;
    密码=document.getElementById(“密码”);
    密码。值=”;
    signinbutton=document.getElementsByName(“登录”)[0];
    signinbutton.click();
    
    然后,这将处理WebView中登录的所有页面加载


    您可以使用Safari inspector窗口尝试所有这些操作。

    谢谢!还不完全在那里。。。仍然在挣扎,但至少我有一些前进的方向!顺便说一句,超过10万真是太好了。PS你认为这可能与我设置的HTTP头有关吗?头基本上看起来没问题。修复
    用户名
    密码
    的大小写,并添加缺少的两个字段,然后查看这是否足以使其工作。通常情况下是这样的,尽管有些网站是为了阻止程序性登录尝试而编写的(例如:编写程序对web服务器进行暴力攻击太容易了)。说真的,仔细观察Charles的请求,尽可能地复制它,看看你能走多远。我做到了!!谢谢你的建议:)谢谢你的信息!希望我能破解它!