bcardarella
(Brian Cardarella)
1
I'm trying to make a simple GET request to a localhost server on my machine. I run the following in the Swift REPL:
import Foundation
let session = URLSession.shared
let url = URL(string: "http://localhost:4000")!
let task = session.dataTask(with: url) { data, response, error in
print(data)
print(response)
print(error)
}
task.resume()
however, nothing happens. I don't get anything printed out and I don't see any request activity on my localhost web server. Is there something that I'm missing to make the request?
1 Like
First off, I think you might want to do http://"YourMacName".local:3000 (you can find the exact name in System Preferences > Sharing). Moreover, URLSession requires all HTTP requests to use HTTPS unless exempt from App Transport Security in the Info.plist file:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Since you're using the REPL though I'm not sure you have access to the Info.plist file.
bcardarella
(Brian Cardarella)
3
@nikitamounier thanks for replying, I tried https://google.com instead and I get the same result. Nothing printed out.
You might want to do https://www.google.com, that worked for me.
1 Like
bcardarella
(Brian Cardarella)
5
Ah, that makes sense. URLSession is likely not following the 301 redirect. Thanks!
1 Like
I think your problem may be that the process is stopped when you're on the REPL prompt.
Notice how
import Dispatch
DispatchQueue.global().asyncAfter(deadline: .now() + 1) { print("hello") }
which should print "hello" after 1 second never does. You'll need to run some function that "hangs" to keep the program running. If after the above you type say sleep(4), then it'll suddenly work.
See here
$ swift
Welcome to Apple Swift version 5.4 (swiftlang-1205.0.22.2 clang-1205.0.19.29).
Type :help for assistance.
1> import Dispatch
2> DispatchQueue.global().asyncAfter(deadline: .now() + 1) { print("hello") }
[ you can wait for a long time here, nothing will happen]
3> sleep(4) // this unblocks it because it resumes the process
hello
$R0: UInt32 = 0
URLSession will have a similar issue unless you win the race and the server responds super quickly (ie. before LLDB pauses the process).